【发布时间】:2012-04-13 10:52:49
【问题描述】:
我创建了一个从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。
【问题讨论】:
标签: c# silverlight events windows-phone-7 data-binding