「Renderer」という名前の単一の依存関係プロパティを定義する依存関係オブジェクトがあります。
public class Renderer {
public string ResourceKey{get; set;}
public string[] Params{get; set;}
}
public class CellInfo : DependencyObject {
public static readonly DependencyProperty RendererProperty=
DependencyProperty.Register("Renderer", typeof(Renderer), typeof(CellInfo), null);
public Renderer Renderer {
get { return (Renderer)GetValue(RendererProperty); }
set { SetValue(RendererProperty, value); }
}
public void UpdateRenderer(string resourceKey, params string[] parameters) {
this.Renderer.ResourceKey = resourceKey;
this.Renderer.Params = parameters;
//force refresh - this does not work
Renderer tmp = this.Renderer;
this.Renderer = null;
this.Renderer = tmp;
}
}
XAMLでは、次のように宣言しています。
<local: CellInfo x:key="cellInfo" />
そしてさらに下に私はそのようにそれにバインドします:
<ControlTemplate x:Key="MyDisplayTemplate" >
<TextBlock VerticalAlignment="Center" HorizontalAlignment="Stretch" >
<TextBlock.Text>
<MultiBinding Converter="{StaticResource MyConverter}" >
<Binding Path="Value" />
<Binding Source="{StaticResource cellInfo}" Path="Renderer"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</ControlTemplate>
上記のコントロールテンプレートは、グリッドのセルの表示テンプレートとして使用されます。私が理解しているように、依存関係オブジェクト/プロパティは、実装よりもパフォーマンスとメモリリソースの優位性があるため、パフォーマンス上の理由からここで使用したいと思いますINotifyPropertyChanged
。
私が抱えている問題は、レンダラーオブジェクトのデータが変更されたときにセルに対してトリガーする更新を取得することです。コードでは、最初にnullに設定してから元のプロパティ値に戻すことで、値が同じ場合に依存関係プロパティが更新をトリガーしないという事実を回避しようとしています。これは動作しません。
私が仕事に取り掛かることができた唯一のことは、オブジェクトに実装さINotifyPropertyChanged
せ、セッターでPropertyChanged
イベントを発生させることです。CellInfo.Renderer
私の推測では、実装する必要があると、INotifyPropertyChange
のみを使用することによるパフォーマンス上の利点が無効になりますDependencyObjects
が、それは正しいですか?この時点で、私が実装を余儀なくされた場合INotifyPropertyChanged
、私は拡張すらしないかもしれませんDependencyObject
、正しいですか?
ご入力いただきありがとうございます。