wpf - 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;
但是组合框不会自行更新,这意味着所选项目不会改变。怎么了?
解决方案
为了使您的绑定正常工作,绑定的属性应该是 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
实现。
推荐阅读
- azure-devops - 如何在 Azure DevOps 的办公时间限制发布部署?
- python - 将文本插入 Microsoft Access 数据库
- node.js - 带有 Google 日历 API(时隙)React/NodeJS 的预约系统
- macos - 如何使基于 Electron 的应用程序处理 AppleScript 事件并定义 sdef 接口?
- python - 打包应用程序后运行 python-shell 电子应用程序时出错(通过使用电子生成器)
- .net - 如何将脚本 Powershell 调用到我的后端 .net 核心?
- python - 如何根据其他键更新默认字典中的值
- sql - 如何查询 SQL 作业所有者的可能登录名?
- python - 路由器连接失败
- c - 在c中使用Makefiles,声明变量多个定义