WPF: TwoWay Binding не обновляется обратно - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть следующий пользовательский элемент управления:

<abc:MyControl MyProperty="{Binding FieldInMyModel, Mode=TwoWay}">

И в моем пользовательском элементе управления есть

public static readonly DependencyProperty MyPropertyProperty =
     DependencyProperty.Register("MyProperty", typeof(double), typeof(MyControl),
     new PropertyMetadata(0.0, OnMyPropertyChanged));

public double MyProperty
{
     get { return (double)GetValue(MyPropertyProperty ); }
     set { SetValue(MyPropertyProperty , value); }
}

private static void OnMyPropertyChanged(DependencyObject d, 
     DependencyPropertyChangedEventArgs e)
{
     if (d is MyControl mc)
     {
          // here I check if the new value is valid for my scope.
          // if it is not I update it here to be valid
          var v = (double)e.NewValue;
          if (!mc.IsValidValue(v))
          {
               v = mc.MakeValidValue(v);
               mc.MyProperty = v;
          }
     }
}

В моей модели я изменяю значение FieldInMyModel на недействительное для моей сферы. OnMyPropertyChanged вызывается, и после получения действительного значения из полученного недопустимого значения, я ожидаю, что FieldInMyModel будет обновлено, чтобы получить новое значение MyProperty, но на самом деле ничего не происходит. Есть мысли?

1 Ответ

0 голосов
/ 20 апреля 2020

Установка MyProperty из кода нарушит вашу двустороннюю привязку.

Вместо этого вы можете использовать метод SetCurrentValue.

...