【发布时间】:2014-05-02 07:48:01
【问题描述】:
我在一个绑定到视图模型的 WPF 应用程序中有一个简单的 ListBox,所以 XAML 看起来像:
<ListBox ItemsSource="{Binding Drivers}"
SelectedItem="{Binding SelectedDriver, Mode=TwoWay}" />
在我的视图模型中,已设置 SelectedDriver,因此我希望当视图显示时,列表框中与 SelectedDriver 相关的驱动程序应突出显示,但事实并非如此。
当在视图模型中设置 SelectedItem 值时,我需要做什么才能使 SelectedItem 突出显示?
已解决:根据下面的答案,我意识到虽然我的 SelectedDriver 对象实际上已被设置,但它不属于 Drivers 集合。一旦我纠正了这一点,它就会按预期工作。感谢大家的意见。我没有足够的分数来增加答案的分数,但非常感谢。
edit:视图模型确实实现了 INotifyPropertyChanged。视图中的许多其他项目会根据它们的绑定正确显示。
edit:视图模型构造函数会做一些内务处理,其中一件事就是将各种视图元素设置为先前的状态。这些元素之一是 Drivers 列表框,因此在视图模型代码中,它被设置为您描述的实际项目: SelectedDriver = Drivers.Where(d => d.Id == savedId) 我已经在 Debug 中验证了这段代码正在找到正确的驱动程序,并且 SelectedDriver 的值是正确的,它只是没有在 UI 中突出显示。
【问题讨论】:
-
你的 ViewModel 是否实现了
INotifyPropertyChanged? -
在页面生命周期的哪个阶段设置 SelectedDriver?
标签: wpf mvvm listbox highlight selecteditem