我觉得自己确实错过了一些事情,但是我不知道我的代码可能有什么问题。

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

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中的当前选定值。

最佳答案

科莫塔爵士,

从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/

10-11 02:30