Мой вопрос может быть субъективным, и извините, если он есть.
Мы разрабатываем приложение UWP с некоторой функцией автосохранения, чтобы каждый раз, когда пользователь что-то обновлял, сохранялся весь объектв файловую систему.
Для этого я использовал интерфейс INotifyPropertyChanged
, чтобы определить, когда свойство изменяется в моем объекте или с событием PropertyChanged
в дочерних объектах, если это необходимо.,И когда изменение появляется через двухстороннее связывание данных, я сохранял весь объект.Примерно так (код может содержать опечатки, не являющиеся представителями реального кода):
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();
}
}
Теперь я могу прослушать событие PropertyChanged
моего ObjectViewModel
, чтобы сохранить его.Зная, что свойство MyString
имеет двустороннюю привязку к TextBox
.И Property1 & 2 имеют двустороннюю привязку к пользовательскому UserControl
(что-то вроде RadioButton
).
Но мой коллега сказал мне, что события PropertyChanged
были использованы для привязки, и это плохопрактиковаться в привязанности к ним, делать бизнес логику.И он удалил прослушивание PropertyChanged
, добавил прослушиватель для события Tapped
для UserControl и отправил пользовательский Message
через Messenger
.То же самое для строки, куда он отправляет кастом Message
при изменении.
Я действительно не большой поклонник его модификаций.
Это плохая практика, чтобы слушать PropertyChanged
событие для бизнес-логики?