首页 > 解决方案 > WPF 我无法在后面的代码中更新组合框值

问题描述

我想更新以下组合框选定项:

<ComboBox ItemsSource="{Binding Path=DictUsers, UpdateSourceTrigger=PropertyChanged}" DisplayMemberPath="Key" SelectedValuePath="Value" SelectionChanged="ComboUser_SelectionChanged" SelectedValue="{Binding Edit.ProtLevel, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" />

ItemsSource,DictUsers,来自字典:

DictUsers = new Dictionary<string, int>();
DictUsers.Add(string.Empty, 0); 
foreach (cUser user in App.Users)
    DictUsers.Add(user.Name, user.ShowLevel);

我无法直接访问 ComboBox,因为它位于数据模板中,因此我加强了更新绑定值(Edit.ProtLevel):

// Test
Edit.ProtLevel = 5;

但是组合框不会自行更新,这意味着所选项目不会改变。怎么了?

标签: wpfcombobox

解决方案


为了使您的绑定正常工作,绑定的属性应该是 aDependencyProperty或在一个实现的类中INotifyPropertyChanged,这样的事情应该可以工作:

public class Edit : INotifyPropertyChanged {
    private int _protLevel;

    public int ProtLevel {
        get => _protLevel;
        set {
            if (_protLevel != (_protLevel = value)) {
                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(ProtLevel)));
            }
        }
    }
    public event PropertyChangedEventHandler PropertyChanged;
}

您可以在此处阅读绑定文档

这里有一个简单的INotifyPropertyChanged 实现


推荐阅读