Я создал элемент управления, полученный от Canvas
, который должен отображать живую диаграмму, заданные значения, которые передаются через привязку к DependencyProperty. Упрощенная версия такова:DependencyProperties: PropertyChangedCallBack только вызывается один раз
public class Plotter : Canvas
{
public float Value { get { return (float)GetValue(ValueProperty); } set { SetValue(ValueProperty, value); } }
public static readonly DependencyProperty ValueProperty =
DependencyProperty.Register("Value", typeof(float), typeof(Plotter),
new PropertyMetadata(0f, new PropertyChangedCallback(ValueChangedCallBack)));
public static void ValueChangedCallBack(DependencyObject property, DependencyPropertyChangedEventArgs args)
{
Plotter plotter = (Plotter)property;
plotter.Value = (float)args.NewValue; //<-- Removed this line to get it to work
// Actually draw the value into the canvas geometry
plotter.PlotValue(plotter.Value);
}
}
Я связала контроль, как это:
<mystuff:Plotter Value="{Binding MyViewModelProperty}" Height="50" Width="200" />
Мои ViewModel реализует INotifyPropertyChanged
и называет PropertyChanged
правильно. Если я привяжу MyViewModelProperty
к текстовому поле, он будет правильно обновляться каждый раз. Только если я привяжу его к своему собственному элементу управления, мой ValueChangedCallBack
вызывается только один раз, когда страница загружается, а затем больше никогда.
Что я не вижу здесь? Спасибо за любую помощь!
Решено: Я не должен устанавливать Value
явно в обратном вызове.
Ахх, это была проблема. Большое спасибо! Я просто удалил строку, которая задает '' Value'' явно, и теперь она работает! –