c# - 如何立即响应 Datagrid 中 Checkbox 引发的 PropertyChanged
问题描述
我有以下代码:
public class ViewModel
{
private IServiceAccess _svcAccess;
public ViewModel(IServiceAccess svcAccess)
{
_svcAccess = svcAccess;
}
public ObservableCollection<Item> ExistingItems
{
get
{
return new ObservableCollection<Item>(_svcAccess.GetExistingItems());
}
}
}
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding Path=Ignore, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
当用户选中该框时,我希望能够立即响应-我读过的所有地方都说它“更新源”,但是我该如何响应呢?我发现的唯一其他示例是相反的,即 ViewModel 中的更改会引发事件以通知 View。
目前,我的 ViewModel 中有一个 ObservableCollection 绑定到数据网格。Ignore 是我的 Item 对象上的一个字段,作为布尔值存储在数据库中。
我想要发生的是选中该框触发我可以在 ViewModel 中响应的事件。
注意 - 我打算将我的 EF 实体映射到 WPF 层的单独 VM 实体中,但被告知这是不必要的和过大的。
解决方案
在您的Item
视图模型中,您有一个 property Ignore
。在用户界面中单击复选框时,绑定将Ignore
在视图模型中的属性上设置更改的值。在那里,您可以响应属性设置器中的更改。以下代码只是具有Ignore
支持字段的属性的示例。
private bool _ignore;
public bool Ignore
{
get => _ignore;
set
{
if (_ignore != value)
{
_ignore = value;
// Do Something here reacting to the changed checkbox state
OnPropertyChanged(nameof(Ignore));
}
}
}
推荐阅读
- javascript - 是否可以从 CORS 政策网站上抓取数据?
- flutter - 我在颤动的刷卡器中看不到我的照片
- c# - C# - Linq - 在 linq 表达式中动态添加比较运算符 (==,>=,<=,!=)
- gaussian - 与 c2c 相比,使用 fftw3 r2c 的 2D 双数组的 DFT
- python - 如何在这个网站上获得发帖请求?https://www.upiqrcode.com/iban-generator/de/germany
- angular - 角度通用在waveform.js中不起作用
- python - python中哪种数据类型占用的空间最少?
- mongodb - 如何通过mongo事务处理并发更新?
- javascript - 如何使用日历图标制作事件监听器
- java - 在线程“main”java.lang.ArrayIndexOutOfBoundsException 中出现错误异常:索引 0 超出长度 0 的范围