【发布时间】:2019-09-20 14:43:19
【问题描述】:
我在 DataGrid 中有一个复选框列,在 DataGrid 列中有一个主复选框。当我选中主复选框时,DataGrid 中所有选中的复选框都将被选中。
当我选中主复选框时,我会检查所有类似的布尔属性 =>
foreach (TSModel value in TimeSheetList.Intersect(selectedlist))
{
if (!chkmain.IsChecked.GetValueOrDefault())
{
value.IsApproved = false;
}
else
{
value.IsApproved = true;
}
}
我的 TSModel =>
public class TSModel:BaseModel, ICloneable
{
bool _IsApproved;
public bool IsApproved
{
get
{
return _IsApproved;
}
set
{
if (_IsApproved != value)
{
_IsApproved = value;
RaisePropertyChange("IsApproved");
}
}
}
}
我的基础模型 =>
public class BaseModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void RaisePropertyChange(string prop)
{
try
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(prop));
IsUpdated = true;
}
}
catch (Exception ex)
{
throw ex;
}
}
bool _IsUpdated = false;
public virtual bool IsUpdated
{
get
{
return _IsUpdated;
}
set
{
_IsUpdated = value;
}
}
}
我的问题是,如果我检查个人,This propertychanged 不为 null 并且 IsUpdated 属性为 true,但是如果我通过 Main 复选框检查并通过 Code 检查更改,则 This propertychanged 为 null 而 IsUpdated 为 false。
当我通过代码检查时,为什么我的 propertychanged 为空?
更新
- 我看到另一个不知道原因,我有100行,我只能看到15条记录,其余的都是垂直滚动显示的。因此,当我检查更改所有复选框时,但如果我只看到 1 到 15,则只有 1 到 15 的属性更改值具有值,其余为空。如果我看到 85 到 100,只有 85 到 100 和 1 到 15 的属性更改值具有值其余为空。
【问题讨论】:
-
嗨,有人请编辑我的代码格式问题。我不知道为什么我不能将我的代码更改为代码格式。正文部分没有选项。
-
不是一个答案,只是一个提示,但是当调用
RaisePropertyChange传递nameof(...)而不是"..."时,这将防止您被错字或如果您要更改属性而绊倒名称等... -
这个问题似乎与this重复
标签: c# wpf inotifypropertychanged