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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dein problem ist wahrscheinlich, weil Ihre
SelectedItem
Style
ist eine andereStyle
Instanz als die passenden eins in derAvailableStyles
imItemsSource
.Was Sie tun müssen, ist Ihre spezifische definition von Gleichstellung in Ihrem
Style
Klasse:Hmm... es sieht aus wie Sie vergessen haben zu implementieren INotifyPropertyChanged für die
SelectedStyle
Eigenschaft...