我想更新以下组合框选定项:
<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;
但是组合框本身不会更新,这意味着选中的项目不会改变。怎么了?
为使您的绑定正常工作,绑定属性应该是DependencyProperty
或在实现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
实现。