我觉得自己确实错过了一些事情,但是我不知道我的代码可能有什么问题。
我确实有一个带有ListView和ComboBox的WPF MVVM应用程序。
列表框显示包含两个对象的对象,假设我有一个列表框:
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中的当前选定值。 最佳答案
科莫塔爵士,
从ViewModel看来,您没有触发正确的OnPropertyChanged
名称,请尝试将OnPropertyChanged()
方法中的名称更改为Property的实际名称(除非缺少更多模型)。
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
应该引用已更改的属性的名称。看来您的名称不正确。关于c# - OnPropertyChange不会更新组合框,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20984032/