我創建了一個控件,從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