С WPF / MVVM обнаружить изменение текстового поля при сохранении - PullRequest
1 голос
/ 17 января 2012

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

Я новичок в wpf и не уверен, какой подход выбрать.Должен ли я использовать что-то вроде UpdateSourceTrigger в свойствах текстового поля в xaml или использовать проверку ... или что-то еще?И каким бы наилучшим образом вы не могли бы объяснить, как и почему?

Спасибо за любую помощь

Ответы [ 3 ]

1 голос
/ 18 января 2012

BigL дал отличную подсказку - спасибо.

Могу ли я добавить: В XAML вашего окна WPF у вас будет следующее для TextBox:

<TextBox Text="{Binding Path=MyPath, Mode=TwoWay, ValidatesOnExceptions=true, NotifyOnValidationError=true, UpdateSourceTrigger=PropertyChanged}" />

и это ....

UpdateSourceTrigger = PropertyChanged

... в конце тега, который совершает все чудо (как BigL , упомянутый выше).Может быть, это то, что вы искали, потому что он обнаруживает изменение текста в вашем текстовом поле независимо от того, имеет ли он фокус, потерял фокус, никогда не фокусировался и т. Д. .... Следовательно, я думаю, это должно помочь вам:-)

у меня отлично работает ....

1 голос
/ 17 января 2012

Лучший способ был бы, если бы у вас была отдельная переменная для каждого TextBox в вашей ViewModel и использовать привязку TwoWay.И реализуйте интерфейс INotifyPropertyChanged, который позволяет вашему ViewModel уведомлять View об изменении значения свойства.Я надеюсь, что это направит вас в правильном направлении и поможет решить вашу проблему.

Другим способом было бы использовать флаг, чтобы показать, что значение изменилось, и ваше сохранение взглянуло на этот флаг и предприняло правильные действия.Вы можете установить флаг в свойствах Setter.

0 голосов
/ 17 января 2012

Мне не совсем понятна проблема: вы хотите обнаружить, если что-то изменилось, КОГДА вы нажимаете кнопку Сохранить? Если так, то почему? Почему бы не проверить это ДО того, как можно будет нажать кнопку? Я не пытаюсь быть тупым, я пытаюсь достичь цели.

Скорее всего, вы захотите использовать TwoWay DataBinding для каждого из текстовых полей обратно к свойствам в ВМ. Сетка также может связываться с этими свойствами, и обновления будут происходить автоматически, и только когда что-то изменится. Вы также можете создавать частные свойства OriginalValue для простого сравнения, если значения изменились.

Далее, я бы привязал кнопку Сохранить к ICommand (я предпочитаю RelayCommand). Это позволит вам контролировать состояние «Включено» связанных кнопок из ViewModel, анализируя состояние изменения свойств.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...