正如主题所说,是否可以在源代码生成的setter方法中“注入”一些null检查?我使用CommunityToolkit.Mvvm
8.1.0.0
对于这个演示,我有一个简单的类Test
,它有一个私有字段_someProperty
,在它的顶部有[ObservableProperty]
。
源码生成的setter和getter
public object SomeProperty
{
get => _someProperty;
set
{
if (!global::System.Collections.Generic.EqualityComparer<object>.Default.Equals(_someProperty, value))
{
OnSomePropertyChanging(value);
OnPropertyChanging(global::CommunityToolkit.Mvvm.ComponentModel.__Internals.__KnownINotifyPropertyChangingArgs.SomeProperty);
_someProperty = value;
OnSomePropertyChanged(value);
OnPropertyChanged(global::CommunityToolkit.Mvvm.ComponentModel.__Internals.__KnownINotifyPropertyChangedArgs.SomeProperty);
}
}
}
我的目标:相同,但注入了null检查
public object SomeProperty
{
get => _someProperty;
set
{
if (value is null)
return;
if (!global::System.Collections.Generic.EqualityComparer<object>.Default.Equals(_someProperty, value))
{
OnSomePropertyChanging(value);
OnPropertyChanging(global::CommunityToolkit.Mvvm.ComponentModel.__Internals.__KnownINotifyPropertyChangingArgs.SomeProperty);
_someProperty = value;
OnSomePropertyChanged(value);
OnPropertyChanged(global::CommunityToolkit.Mvvm.ComponentModel.__Internals.__KnownINotifyPropertyChangedArgs.SomeProperty);
}
}
}
我只是想检查value是否为null,并省略在setter中设置它。在我的项目中,我有两个DataGrid和TreeView处理SelectedItem
事件。它们绑定到同一个SelectedOobject
。此对象在构造函数中初始化,我真的不希望它为null。如果刷新DataGrid,可能会发生这种情况(过滤的原因)和SelectedOobject
可能在当前视图中不可用,它会自动设置为null
。我宁愿仍然使用旧对象(旧引用),而不是null
,这使得在每个方法中检查它变得烦人。
1条答案
按热度按时间brccelvz1#
对于这种情况,我的“变通方法”是创建另一个具有
[ObservableProperty]
属性的_tmpSomeProperty
。将此属性绑定到SelectedItem
DataGrid。然后创建partial方法:用这种方法我可以控制
SomeProperty
。它是不是有点多余?我想...但它按我想的那样工作。