我创建了一个派生自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
。
答案 0 :(得分:5)
您在属性值更改的回调上设置属性Value。在任何情况下都没有多大意义。但是,本地设置值是否覆盖了绑定值,导致不再在依赖项属性上设置绑定?
答案 1 :(得分:1)
您是否需要将绑定模式设置为TwoWay?
答案 2 :(得分:1)
您是否应该使用DependencyProperty.Register而不是DependencyProperty.RegisterAttached?