我觉得我确实错过了一些东西,但我的想法是我的代码可能出错了。
我有一个带有ListView和ComboBox的WPF MVVM应用程序。 ListBox显示包含两个对象的对象,假设我有一个ListBox:
Intel <> CPU
Intel <> GPU
AMD <> CPU
和ComboBox:
Intel
AMD
我想要实现的目标:
当我点击Intel <> CPU
或Intel <> GPU
时,我希望将ComboBox设置为Intel
。
我的代码:
<ListBox ItemsSource="{Binding Parts}" SelectedItem="{Binding Path=SelectedPart, Mode=TwoWay}" />
<ComboBox ItemsSource="{Binding Producers}" SelectedItem="{Binding Path=SelectedProducer, Mode=TwoWay}"/>
目前,当我点击ListBox项目时,它会触发OnPropertyChanged并输入我的方法
private Parts _selectedPart;
public Parts SelectedPart
{
get{return _selectedPart;}
set{
_selectedPart= value;
SelectedProducer = _selectedPart.Producer;
OnPropertyChanged("SelectedRealisation");
}
}
private Producers _selectedProducer;
public Producers SelectedProducer
{
get{return _selectedProducer; }
set
{ _selectedProducer= value;
OnPropertyChanged("SelectedProducers");
}
}
它确实正确设置了SelectedProducer(使用调试器检查),它会触发OnPropertyChanged("SelectedProducers")
,但它不会将ComboBox可见选定值更新为ListBox中当前选定的值。
答案 0 :(得分:3)
SirKometa,
从您的ViewModel看来,您没有触发正确的OnPropertyChanged
名称尝试将OnPropertyChanged()
方法中的名称更改为属性的实际名称(除非缺少更多模型) 。
private Parts _selectedPart;
public Parts SelectedPart
{
get{return _selectedPart;}
set{
_selectedPart= value;
SelectedProducer = _selectedPart.Producer;
OnPropertyChanged("SelectedPart");
}
}
private Producers _selectedProducer;
public Producers SelectedProducer
{
get{return _selectedProducer; }
set
{ _selectedProducer= value;
OnPropertyChanged("SelectedProducer");
}
}
OnPropertyChanged
应该引用已更改的属性的名称。您的姓名似乎不正确。
答案 1 :(得分:0)
事实证明我并没有真正深入挖掘,因为我的麻烦的答案一直在StackOverFlow ......我在这里找到了它: WPF - MVVM - ComboBox SelectedItem
Producers
一直在从数据库中检索数据,这就是ComboBox无法更新的原因。