【发布时间】:2019-02-14 14:26:57
【问题描述】:
我的问题可能是主观的,如果是,我很抱歉。
我们正在开发一个具有自动保存功能的 UWP 应用程序,这样每次用户更新某些内容时,整个对象都会保存到文件系统中。
为了做到这一点,我使用INotifyPropertyChanged 接口来检测我的对象中的属性何时发生更改,或者在需要时使用PropertyChanged 事件在子对象中进行更改。
当通过 2 路数据绑定出现更改时,我正在保存整个对象。
类似的东西(代码可能包含拼写错误,不代表真实代码):
public class ObjectViewModel : ViewModelBase // from MVVM-Light
{
public ObjectViewModel()
{
Section1 = new SectionViewModel();
Section1.PropertyChanged += SectionOnPropertyChanged();
Section2 = new SectionViewModel();
Section2.PropertyChanged += SectionOnPropertyChanged();
}
public SectionViewModel Section1 { get; set; }
public SectionViewModel Section2 { get; set; }
private void SectionOnPropertyChanged(object sender, PropertyChangedEventArgs e)
{
RaisePropertyChanged();
}
}
public class SectionViewModel : ViewModelBase // from MVVM-Light
{
private string _myString;
public SectionViewModel()
{
Property1 = new SubPropertyViewModel();
Property1.PropertyChanged += SubPropertyOnPropertyChanged();
Property2 = new SubPropertyViewModel();
Property2.PropertyChanged += SubPropertyOnPropertyChanged();
MyString = "some value";
}
public string MyString
{
get => _myString;
set => Set(ref _myString, value);
}
public SubPropertyViewModel Property1 { get; set; }
public SubPropertyViewModel Property2 { get; set; }
private void SectionOnPropertyChanged(object sender, PropertyChangedEventArgs e)
{
RaisePropertyChanged();
}
}
现在我可以收听我的ObjectViewModel 的PropertyChanged 事件来保存它。
知道MyString 属性是双向绑定到TextBox。
并且 Property1 和 2 是双向绑定到自定义 UserControl(某种 RadioButton)的。
但是我的同事告诉我,PropertyChanged 事件用于绑定,附加到它们以执行业务逻辑是不好的做法。
他删除了对PropertyChanged 的监听,为UserControl 添加了Tapped 事件的监听器,并通过Messenger 发送了一些自定义Message。
字符串也是如此,他在更改时发送自定义Message。
我真的不喜欢它的修改。
收听PropertyChanged 事件以获取业务逻辑是一种不好的做法吗?
【问题讨论】:
-
我认为收听
PropertyChanged比收听Tapped事件更有效。这听起来像是一个可怕的解决方案。
标签: c# mvvm uwp mvvm-light