Member 12658724 Ответов: 0

Выполните метод в сеттере свойства


У меня есть собственность.

private MyModel _selectedModel;
public MyModel SelectedModel
{
   get {return _selectedModel;}
   set {ValidateProperty(ref _selectedModel, value);}
}   

ValidateProperty
это как-то базовый класс, который наследует
inotifypropertychanged
. Он имеет
public event PropertyChangedEventHandler PropertyChanged;
Но я не могу изменить его, потому что все им пользуются.

Мой вопрос заключается в том, что когда свойство изменилось, мне нужно позвонить в службу. Итак, мой код таков
private MyModel _selectedModel;
public MyModel SelectedModel
{
   get {return _selectedModel;}
   set
   {
         ValidateProperty(ref _selectedModel, value);
		 if(value != null)
		     CallService(value);
   }
}


Не уверен, что это хорошая практика?

Что я уже пробовал:

Спасибо за поддержку кода. Может быть, использовать событие вместо службы вызовов в сеттере?

Richard Maly

Я собираюсь пойти на риск и сказать, что это звучит нормально для меня. Именно поэтому свойства отличаются от переменных. Однако в зависимости от того, что происходит дальше по коду, могут возникнуть побочные эффекты. Я предполагаю, что это либо SL, либо XAML, поэтому вы можете рассмотреть возможность появления в потоке, чтобы все, что делает служба, не блокировало ваш пользовательский интерфейс

Christiaan van Bergen

Имейте в виду, что метод ValidateProperty может внести некоторые изменения в значения до того, как они будут переданы в _selectedModel. Вы выполняете свой код на "значении", вы уверены, что хотите это сделать? Разве вы не хотите выполнить свой код на '_selectedModel' ?

И на самом деле ваш код будет выполняться каждый раз, когда значение SelectedModel будет установлено, а не равно нулю. Это несколько отличается от вызова вашего кода всякий раз, когда свойство изменяется.

И да, возможно, Вам будет лучше создать новый обработчик, реагирующий на событие PropertyChanged.

Member 12658724

Это приложение wpf. Когда я щелкаю строку в сетке, свойство изменяется и вызывает службу.

Member 12658724

Я могу использовать event, но не знаю, как это сделать для этого случая.

0 Ответов