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
と、毎回正しく更新されます。自分のコントロールにバインドした場合にのみ、 myValueChangedCallBack
はページが読み込まれるときに一度だけ呼び出され、その後は呼び出されません。
ここには何が表示されていませんか? 助けてくれてありがとう!
解決済み:Value
コールバックで明示的に設定する必要はありません。