WPF ListView-Einstellung SelectedItem

Ich habe versucht, die Suche für eine Antwort auf diese, aber ich bin nicht mit Glück. Im Grunde habe ich eine listview ist an eine Auflistung gebunden zurück von einer view-Modell. Ich Binde das ausgewählte Element in der Liste anzeigen, um eine Immobilie in meine listview, um eine Validierung, um sicherzustellen, dass ein Element ausgewählt ist. Das problem ist, dass ich manchmal wollen, laden Sie diese listview mit einer der bereits ausgewählte Elemente. Ich hatte gehofft, in der Lage sein, um die Eigenschaft auf, mein Blick Modell mit dem Objekt will ich ausgewählt und haben es automatisch, wählen Sie das Element. Ist dies nicht der Fall. Meine listview geladen werden, ohne ein Element ausgewählt. Kann ich erfolgreich den gewählten index der index 0. warum sollte ich also nicht in der Lage sein, um den gewählten Wert. Die Listenansicht ist im single-Modus Auswahl.

Hier ist der relevante code aus meiner Liste Ansicht

<ListView Name="listView1" ItemsSource="{Binding Path=AvailableStyles}" SelectionMode="Single">
            <ListView.SelectedItem>
                <Binding Path="SelectedStyle" ValidatesOnDataErrors="True" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged" BindingGroupName="StyleBinding" >

                </Binding>
            </ListView.SelectedItem>
            <ListView.View>
                <GridView>
                    <GridViewColumn Header="StyleImage">
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                               <Image Source="800.jpg"/>
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>
                    <GridViewColumn Header="Style Code" DisplayMemberBinding="{Binding StyleCode}"/>
                    <GridViewColumn Header="Style Name" DisplayMemberBinding="{Binding StyleName}"/>
                </GridView>
            </ListView.View>
        </ListView>

Und hier ist der relevante code aus meiner Sicht Modell

public class StyleChooserController : BaseController, IDataErrorInfo, INotifyPropertyChanged
{
    private IList<Style> availableStyles;
    private Style selectedStyle;

    public IList<Style> AvailableStyles 
    {
        get { return availableStyles; }
        set
        {
            if (value == availableStyles)
                return;

            availableStyles = value;

            OnPropertyChanged("AvailableStyles");
        }
    }
    public Style SelectedStyle 
    {
        get { return selectedStyle; }
        set
        {
            //if (value == selectedStyle)
            //   return;

            selectedStyle = value;

            OnPropertyChanged("SelectedStyle");
        }
    }

    public StyleChooserController()
    {
        AvailableStyles = StyleService.GetStyleByVenue(1);

        if (ApplicationContext.CurrentStyle != null)
        {
            SelectedStyle = ApplicationContext.CurrentStyle;
        }
    }

    public string Error
    {
        get { return null; }
    }

    public string this[string columnName]
    {
        get
        {
            string error = string.Empty;
            if (columnName == "SelectedStyle")
            {
                if (SelectedStyle == null)
                {
                    error = "required";
                }
            }

            return error;
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler handler = this.PropertyChanged;
        if (handler != null)
        {
            var e = new PropertyChangedEventArgs(propertyName);
            handler(this, e);
        }
    }

}

Sollte ich beachten Sie, dass der "Stil" verwiesen wird, hat hier nothign zu tun mit WPF. Es ist ein business-Objekt. Ich bin wirklich auf der Suche nach einer Lösung, nicht zu brechen das MVVM-Muster, aber ich wäre bereit, nur etwas funktionieren. Ich habe versucht eine Schleife über das Listview-Steuerelement.Artikel-Liste einfach, um es manuell aber es ist immer leer, wenn ich versuche. Jede Hilfe ist willkommen.

Edit: ich aktualisierte den code zu verwenden, INotifyPropertyChanged. Funktioniert es immer noch nicht. Andere Vorschläge
2. Edit: ich fügte hinzu, UpdateSourceTrigger="PropertyChanged". Dass immer noch nicht.

Dank

InformationsquelleAutor Chris Cap | 2010-02-18
Schreibe einen Kommentar