【发布时间】:2017-05-31 18:35:17
【问题描述】:
在 ViewModel 中设置 SelectedItem 后,如何使 ListBox 的 SelectedItem 突出显示?
ItemsSource 绑定到Bar 的ObservableCollection(集合是Foo 类的成员。按钮绑定到向集合添加新的空Bar 实例的命令然后还将SelectedItem 设置为新的空实例。
将实例添加到集合后,ListBox 会更新以显示新的空白 Bar。但是,在 ViewModel 中设置 SelectedItem 属性后,新实例不会在 ListBox 中突出显示,但它正在设置中并引发 PropertyChanged 事件(SelectedItem 显示在视图中的其他位置)。
其他细节:
INotifyPropertyChanged 在基础 ViewModel 类中实现,也在 Foo 和 Bar 类中实现。
ListBox 包含一个自定义 ItemTemplate 以显示 Bar 成员,以及一个自定义 ItemContainerStyle 修改 Background 的 IsMouseOver 触发器。
简化的 xaml:
<ListBox ItemsSource="{Binding Path=MyFoo.BarCollection}"
SelectedItem="{Binding Path=SelectedItem,
UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>
<Button Content="Add New Bar"
Command="{Binding Path=AddBarCommand}"/>
简化的视图模型:
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;
}
【问题讨论】:
-
BarCollection的类型是什么? -
@Ed
BarCollection是ObservableCollection<Bar> -
我认为它必须是。有了这个假设,您的代码对我来说效果很好。新项目是否有可能以一种非常淡的灰色突出显示,与它周围的窗口几乎无法区分?现代版本的 Windows 中默认的非聚焦突出显示背景颜色可能非常难以注意到。如果是这样,它很容易修复。
-
@Ed Ughh...是的!将ListBox背景改为白色,新添加的项确实是LightGray高亮。猜猜我会覆盖 SystemColor 画笔?谢谢!
标签: c# wpf mvvm .net-4.0 selecteditem