2012-01-16 2 views
1

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

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

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

ответ

1

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

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

0

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

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

Кроме того, я бы привязал кнопку Save к ICommand (я предпочитаю RelayCommand). Это позволит вам управлять состоянием привязанных кнопок Enabled из ViewModel, анализируя состояние изменения свойств.

1

BigL дал отличный совет - спасибо.

Могу ли я добавить: В XAML вашего WPF-Window, вы бы следующие за TextBox:

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

и это ....

UpdateSourceTrigger = PropertyChanged

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

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