実行時にデータテンプレートを切り替える-問題を更新する
-
11-07-2019 - |
質問
MVVMアーキテクチャを使用して、アプリケーションを分離します。つまり、次のようなものがよく表示されます
var u = new UserControl();
u.Content = new MyCustomType(); // MyCustomType is not a control
UIは、独自のXAMLファイルのリソースディクショナリにあるデータテンプレートを介して定義されます
<ResourceDictionary ...>
<DataTemplate DataType="{x:Type local:MyCustomType}">
...
アプリケーションの起動時にリソースをロードすると、アプリケーションにUIが表示されます。ただし、データテンプレートを削除して新しいテンプレート(同じキー、同じデータ型)を追加すると、UIは引き続き古いデータテンプレートを使用します。もちろん、コンテナのコンテンツを再設定して強制的に更新することもできますが、このようにすべてのコントロールに変更について通知する必要があるため、これは間抜けに見えます
var tmp = control.Content;
control.Content = null;
control.Content = tmp; // New data template will be used
その他のアプローチ?
解決
これは、リソースが辞書内で静的であるためです。一度使用されると、それらは更新されません。辞書をリロードしようとすることもできますが、更新されるのは新しいコントロールのみで、古いコントロールは更新されません。
複数のDataTemplatesをサポートする場合、DataTemplateSelectorクラスを検討できます。これにより、条件に応じてテンプレートが選択されます。 http://msdn.microsoft.com/en- us / library / system.windows.controls.datatemplateselector.aspx
「オンザフライ」でテンプレートを切り替える必要がある場合は、ControlTemplatesとコントロールのTemplateプロパティのバインディングをいつでも使用することを検討できます。
{Binding Converter={StaticResource YourAwesomeTemplateSwitcherConverter}}
HTH
所属していません StackOverflow