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" />
私のViewModelはINotifyPropertyChanged
を実装し、正しくPropertyChanged
を呼び出します。私がMyViewModelProperty
をテキストボックスにバインドすると、毎回正しく更新されます。私が自分のコントロールにバインドした場合にのみ、私のValueChangedCallBack
は、ページがロードされると一度だけ呼び出され、その後は一度も呼び出されません。
私はここで何を見ませんか?助けてくれてありがとう!
解決済み:コールバックにValue
を明示的に設定する必要はありません。
ああ、それは問題でした。どうもありがとう! '' Value''を明示的に設定した行を削除しました。 –