【发布时间】:2020-09-15 15:41:34
【问题描述】:
如果以前有人问过这个问题,我深表歉意,但我找不到任何有用的东西。
我有以下课程
public class NumberOfInterest
{
public bool HasChanged { get; set; } = false;
public bool Prop1 { get; set; }
public bool Prop2 { get; set; }
---
}
在我的用户控件中,我有一个 DataGrid 用作项目源 ObservableCollection<NumberOfInterest>。在这个网格中,我有 2 个CheckBox 列分别绑定到 Prop1 和 Prop2
最后,每个NumberOfInterest 的属性HasChanged 应在其初始状态发生变化(即Prop1 或Prop2 变化)时设置为true
属性HasChanged在CanExecute事件中的Command中使用方式如下
public ICommand Save
{
get
{
save = new RelayCommand(() => SaveChanges(), () => NumbSource.Any(x => x.HasChanged));
return save;
}
}
复选框以下列方式使用事件 CheckBox_Checked
private void CheckBox_Checked(object sender, RoutedEventArgs e)
{
CheckBox c = sender as CheckBox;
if (!(c.DataContext is NumberOfInterest n))
return;
n.HasChanged = true;
n.Prop1 = c.IsChecked.Value;
}
Prop2 也有类似的
问题在于,如果我的项目源中的元素将 2 Prop1 或 Prop2 中的任何一个默认设置为 true,则 HasChanged 会自动设置为 true。
我想找到一种方法来触发CheckBox_Checked 事件,只有在用户控件处于用户处置状态后(即用户可以对其进行迭代并加载所有内容)。
我尝试设置 Loaded 和 Initialized 来设置本地布尔值,但这些事件在项目源实际设置之前触发
我还在复选框绑定中尝试了 Mode = "OneWayToSource",但这首先会阻止复选框设置为正确的状态
【问题讨论】: