Можно ли присвоить значение свойству по событию измененного свойства? - PullRequest
0 голосов
/ 20 июля 2010

Я работаю в модели wpf - mvvm.

У меня есть текстовое поле с названием "marketName". В xaml я привязываю свойство - "newmarketname" (которое определено в моей viewmodel) к этому текстовому полю. Однажды, если пользователь вводит новое рыночное имя в этом текстовом поле, вызывается метод «set» для «newmarketname».

В методе set «newmarketname» я вызываю событие PropertyChanged.

И обработчик изменения свойства вызовет функцию, в которой я проверяю, существует ли уже название рынка; если «да», я назначу string.Empty свойству «newmarketname». Таким образом, снова вызывается заданный метод «newmarketname» с последующим событием PropertyChanged.

Но проблема в том, что даже если значение «newmarketname» меняется на пустое, оно не отражается в пользовательском интерфейсе.

В чем проблема?

Ответы [ 3 ]

1 голос
/ 20 июля 2010

WPF будет игнорировать события PropertyChanged, которые возникают, когда он устанавливает значение. Один из обходных путей - использовать конвертер (даже тот, который просто возвращает необработанное значение) и установить UpdateSourceTrigger в LostFocus. Другой способ - установить для IsAsync значение True.

Это было исправлено в .NET 4.0. Смотрите эту запись в блоге для получения дополнительной информации: http://karlshifflett.wordpress.com/2009/05/27/wpf-4-0-data-binding-change-great-feature/

0 голосов
/ 20 июля 2010

Может быть, вы могли бы установить режим привязки на TwoWay, таким образом он будет отражать как изменения пользовательского интерфейса, так и код, стоящий за

<TextBlock Text="{Binding newmarketname, Mode=TwoWay}" />
0 голосов
/ 20 июля 2010

Вы меняете базовую переменную вместо свойства? Я всегда так делаю (по ошибке).

...