ViewModel:
public class MyViewModel : INotifyPropertyChanged
{
public string MyText { ... }
}
XAML:
<my:MySpecialTextBox Text="{Binding MyText}" />
Пользовательский элемент управления:
public class MySpecialTextBox : TextBox
{
static MySpecialTextBox()
{
TextProperty.OverrideMetadata(typeof(MySpecialTextBox),
new FrameworkPropertyMetadata
{
BindsTwoWayByDefault = true,
DefaultValue = string.empty,
PropertyChangedCallback = OnTextPropertyChanged
});
}
private static void OnTextPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var control = d as MySpecialTextBox;
if (control != null)
{
control.Text = SomeAdjustedValue((string)e.NewValue);
}
}
}
Проблема заключается в том, что, хотя свойство DependencyProperty вЭлемент управления корректируется должным образом, он не обновляет ViewModel.Я понимаю, что этот кажется таким, как если бы он был CoerceValueCallback из-за именования SomeAdjustedValue, но Coercion также не изменяет значение ViewModel.Я не могу обновить значение в моем ViewModel, если оно было триггером для обратного вызова OnTextPropertyChanged для начала ... Я сделал отладочную трассировку, и она не проходит через ViewModel во второй раз с новым значением.Не уверен, что нужно сделать, чтобы это исправить.