Wie kann ich die SelectedItem
von einem ListBox
hervorgehoben werden nach der Einstellung der SelectedItem
im ViewModel?Change SelectedItem von ListBox von ViewModel
Die ItemsSource
gebunden ist an einen ObservableCollection
von Bar
(die Sammlung ist ein Mitglied einer Klasse Foo
. Ein Knopf auf einen Befehl gebunden ist, die eine neue leere Bar
Instanz zu der Sammlung hinzugefügt und anschließend setzt auch SelectedItem
auf die neuen leeren Instanz.
die Instanz zur Sammlung nach Zugabe wird die ListBox
die neue leeren Bar
aktualisiert, um anzuzeigen. doch nach der SelectedItem
Eigenschaft in der Ansichtsmodell Einstellung wird die neue Instanz nicht in den ListBox
hervorgehoben, aber es festgelegt wird und das PropertyChanged
Ereignis wird ausgelöst (SelectedItem
wird an anderer Stelle in der Ansicht angezeigt).
Weitere Details:
INotifyPropertyChanged
in einer Basisklasse Ansichtsmodell implementiert ist, und auch in den Foo
und Bar
Klassen implementiert.
The ListBox
enthält eine benutzerdefinierte ItemTemplate
Bar
Mitglieder anzuzeigen, und eine benutzerdefinierte ItemContainerStyle
, die die für die Background
IsMouseOver
Trigger modifiziert.
vereinfacht XAML:
<ListBox ItemsSource="{Binding Path=MyFoo.BarCollection}"
SelectedItem="{Binding Path=SelectedItem,
UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>
<Button Content="Add New Bar"
Command="{Binding Path=AddBarCommand}"/>
vereinfacht Viewmodel:
private Foo _myFoo;
public Foo MyFoo
{
get { return _myFoo; }
set { _myFoo= value; OnPropertyChanged("MyFoo"); }
}
private Bar _selectedItem;
public Bar SelectedItem
{
get { return _selectedItem; }
set { _selectedItem = value; OnPropertyChanged("SelectedItem"); }
}
private void AddBar()
{
Bar newBar = new Bar();
MyFoo.BarCollection.Add(newBar);
SelectedItem = newBar ;
_unsavedChanges = true;
}
Was die Art der 'BarCollection' ist? –
@Ed 'BarCollection' ist eine' ObservableCollection ' –
jonmicjam
Ich dachte, es musste sein. Mit dieser Annahme hat Ihr Code für mich funktioniert. Ist es möglich, dass der neue Gegenstand in einer wirklich blassgrauen Farbe hervorgehoben wird, die kaum von dem Fenster um ihn herum zu unterscheiden ist? Die standardmäßige nicht fokussierte Hervorhebungshintergrundfarbe in modernen Versionen von Fenstern kann perverserweise schwer zu bemerken sein. Wenn das der Fall ist, ist es leicht zu reparieren. –