我创建了一个从 派生的控件,Canvas
它应该绘制一个实时图表,给定通过绑定传递到 DependencyProperty 的值。简化版是这样的:
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
在回调中显式设置。