Модераторы: gambit, Kefir, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> "Правильная" логика вызова OnProperyChanged, В каких случаях вызывать? 
:(
    Опции темы
dzaraev
  Дата 21.2.2013, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 12.1.2013

Репутация: нет
Всего: 1



Вопрос о событии PropertyChanged интерфейса INotifyPropertyChanged.
Допустим инвокер - метод OnPropertyChanged(string propertyName);

Вижу два варианта логики вызова:
1. Вызывать только тогда, когда значение свойства действительно изменилось (строгий вариант).
2. Вызывать когда оно возможно изменилось (нестрогий вариант).

Собственно вопрос - какая из двух практик более "по феншую", больше соответствует MVVM. 
А также - приемлем ли нестрогий вариант вообще и в каких случаях. 

Почему задаю такой вопрос - потому, что нестрогий вариант проще в использовании и поддержки со стороны класса, вызывающего событие.
Однако строгий вариант - более "честный" и исключает вероятность ошибки на стороне клиента, вызванной неверным предположением, что свойство действительно изменилось (а оно могло остаться прежним).


--------------------
Если вопрос решён - помечайте тему.  
PM MAIL   Вверх
mrbrooks
Дата 21.2.2013, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: нет
Всего: 306



если я правильно понял вопрос - то в сеттере привязанного свойства сначало идет проверка на равенство с уже имеющимся значением. если равно то ретурн, если нет то PropertyChanged

PM MAIL   Вверх
dzaraev
Дата 21.2.2013, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 12.1.2013

Репутация: нет
Всего: 1



В простейшем случае да, но это возможно когда мы точно знаем, что значение изменилось и непосредственно меняем свойство.
Но иногда бывает, что у свойства, например, нет сеттера, а гет делегируется куда-нибудь дальше.
--------------------
Если вопрос решён - помечайте тему.  
PM MAIL   Вверх
snav
Дата 26.3.2013, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 8.9.2007

Репутация: 2
Всего: 4



Мне кажется, тут всё зависит от ситуации. Универсального рецепта нет.
PM   Вверх
gambit
Дата 5.6.2013, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***
Награды: 1



Профиль
Группа: Комодератор
Сообщений: 1359
Регистрация: 25.6.2006
Где: я?

Репутация: нет
Всего: 40



Мне кажется это не то место, где можно настолько просесть по перфомансу, что бы размышлять "вызвать или не вызвать"...
Я всегда пишу вызов в сеттере без проверок:

Код

        private int a;

        public int A
        {
            get { return a; }
            set
            {
                a = value;
                RaisePropertyChanged("A");
            }
        }

PM MAIL ICQ Skype   Вверх
jonie
Дата 20.6.2013, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 2
Всего: 118



чувак говорит не о том, а о том что у него еще есть свойство B:
Код

int B {get {return A*2; } }

и мол ты A меняешь, надо ли вызывать PropertyChanged("B") ?

Я считаю что надо. Если класс реализует INPC то все его свойства должны обеспечивать интерфейс.
Вопрос усложняется когда B зависит не от одного свойства A, а от нескольких.. тут надо крутить что-то вроде BeginUpdate()--EndUpdate() чтобы не дергать "B поменялся" впустую.


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.0743 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.