外部ソースに依存するプロパティの場合、DependencyProperty
を作成するときに少し混乱します。例えば、私が書いている超音波アプリケーションでは、私は現在、(INotifyPropertyChangedのを実装し、ここで簡単にするためのC#に翻訳)マネージドC++ラッパーに次があります。値がローカルに格納されていないDependencyProperties
public int Gain
{
get { return ultrasound.GetParam(prmGain); }
set
{
ultrasound.SetParam(prmGain, value);
NotifyPropertyChanged("Gain");
}
}
すべての私のコードは、WPFで使用され、私はINotifyPropertyChanged
をDependencyProperty
に変更する方法を検討していましたが、変更の恩恵を受けることができます。このような変数は約30種類あり、その大部分は画面上のスライダ、テキストブロック、または他のコントロールにデータバインドされています。
このオブジェクトにDependencyProperty
を実装するには、以下の点が正しいでしょうか?
public int Gain
{
get { return ultrasound.GetParam(prmGain); }
set
{
ultrasound.SetParam(prmGain, value);
this.SetValue(GainProperty, value);
}
}
public static readonly DependencyProperty GainProperty = DependencyProperty.Register(
"Gain", typeof(int), typeof(MyUltrasoundWrapper), new PropertyMetadata(0));
this.GetValue(GainProperty)
が使用されていない例は見たことがありません。また、値を変更する可能性のある他の関数もあります。これも正しい変更でしょうか?
public void LoadSettingsFile(string fileName)
{
// Load settings...
// Gain will have changed after new settings are loaded.
this.SetValue(GainProperty, this.Gain);
// Used to be NotifyPropertyChanged("Gain");
}
はまた、サイドノートに、私は、プロパティのほとんどは、データバインド、またはむしろ、多くのパラメータは、データバインドされません場合は、パフォーマンスの低下している場合のパフォーマンスの向上を期待できますか?
これは、私がthis.Gain(これはultrasound.GetParamを呼び出します)を渡す理由と、値が手動で設定されている場合の値です。私は、上記のロジックは常に最新のローカルバージョンのGainを保持すると思った。 –
私はあなたが価値を得ることでうまくいくかもしれないと思います。私の心配は、その設定です。値がWPFバインディングで設定されると、Setを呼び出さないため、ultrasound.SetParam(prmGain、value);呼び出されず、超音波オブジェクト内の値は更新されません。バインディングはgetまたはsetを呼び出さず、依存関係プロパティ自体に対して直接的に作用します。 –
あなたはおそらく私がそれをあまりにも多く考えているということは正しいでしょう。私はそれをINotifyPropertyChangedとして保つべきです。私は、WPFへのデータバインディングのための機能としてINotifyPropertyChangedを実装しているだけなので、DependencyPropertiesはこれを高速化できると考えていましたが、ローカル変数ではないという事実がデータを同期化するために不必要に複雑にしています。 –