Проблема с привязкой данных WPF (MVVM)

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

Код xaml выглядит так:

<TextBox Text="{Binding Path=OrderDetail.CashPaid, Mode=TwoWay}"/>

Когда представление загружено, система привязки запрашивает свойство CashPaid один раз. но всякий раз, когда текст редактируется, значение не обновляет источник. Мне здесь что-то не хватает, или система привязки данных WPF не поддерживает такую ​​привязку.


person Community    schedule 17.07.2009    source источник
comment
Вам не ясно, что редактируется - текст в текстовом поле или текст в свойстве CashPaid.   -  person    schedule 17.07.2009
comment
текст в текстовом поле редактируется пользователем.   -  person    schedule 17.07.2009


Ответы (3)


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

http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx

person Jeff Wain    schedule 17.07.2009
comment
См. Также Как: реализовать интерфейс INotifyPropertyChanged: msdn.microsoft.com/en- us / library / ms229614.aspx - person M. Dudley; 17.07.2009
comment
да, у меня реализован интерфейс INotifyProperty и вызываю событие в установщике. для обычной привязки, например просто привяжите к текущему свойству datacontext / viewmodel, он отлично работает. единственная разница в том, где находится недвижимость. Я даже пытаюсь установить dataContext в текстовом поле на OrderDetail и установить привязку текста в обычном режиме, не имеет никакого значения. - person ; 17.07.2009
comment
В этом случае попробуйте установить BindsDirectlyToSource = true и посмотрите, изменится ли что-нибудь. Кроме того, является ли свойство CashPaid строкой? В противном случае он не может связать TwoWay без IValueConverter. - person Jeff Wain; 17.07.2009
comment
Я думаю, что Джефф мог это понять: CashPaid звучит как логическое или числовое. При привязке будет использоваться ToString () без преобразователя, поэтому может показаться, что привязка выполняется правильно. Чтобы выполнить обратное преобразование, вам необходимо реализовать оба метода IValueConverter. - person Joel Cochran; 17.07.2009

По умолчанию TextBox будет обновлять источник привязки только тогда, когда фокус покидает элемент управления. Если вы установите UpdateSourceTrigger на PropertyChanged, свойство будет обновляться по мере ввода пользователем:

<TextBox Text="{Binding Path=OrderDetail.CashPaid, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
person Andy    schedule 17.07.2009
comment
Да, я пытаюсь установить UpdateSourceTrigger = PropertyChanged, не повезло. - person ; 17.07.2009

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

person Eli Dagan    schedule 09.11.2015