OnPropertyChange不更新组合框

时间:2014-01-07 23:19:00

标签: c# wpf mvvm

我觉得我确实错过了一些东西,但我的想法是我的代码可能出错了。

我有一个带有ListView和ComboBox的WPF MVVM应用程序。 ListBox显示包含两个对象的对象,假设我有一个ListBox:

Intel <> CPU 
Intel <> GPU
AMD <> CPU

和ComboBox:

Intel
AMD

我想要实现的目标: 当我点击Intel <> CPUIntel <> 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中当前选定的值。

2 个答案:

答案 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无法更新的原因。