我创建了一个控件,从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" />
我的视图模型实现INotifyPropertyChanged
和正确调用PropertyChanged
。如果我将MyViewModelProperty
绑定到文本框,它每次都会正确更新。只有当我将其绑定到我自己的控件时,我的ValueChangedCallBack
仅在页面加载时调用一次,然后再次不再。
我在这里没有看到什么?谢谢你的帮助!
已解决:我不必在回调中明确地设置Value
。
啊,那就是问题所在。非常感谢!我刚刚删除了明确设置“Value”的行,现在它可以工作! – 2012-04-13 11:04:06