C# 在运行时切换数据模板–;刷新问题

C# 在运行时切换数据模板–;刷新问题,c#,wpf,datatemplate,skinning,C#,Wpf,Datatemplate,Skinning,我使用MVVM体系结构来解耦我的应用程序。也就是说,你经常看到 var u = new UserControl(); u.Content = new MyCustomType(); // MyCustomType is not a control UI是通过数据模板定义的,这些数据模板位于资源字典中各自的XAML文件中 <ResourceDictionary ...> <DataTemplate DataType="{x:Type local:MyCustomType

我使用MVVM体系结构来解耦我的应用程序。也就是说,你经常看到

var u = new UserControl();
u.Content = new MyCustomType(); // MyCustomType is not a control
UI是通过数据模板定义的,这些数据模板位于资源字典中各自的XAML文件中

<ResourceDictionary ...>
    <DataTemplate DataType="{x:Type local:MyCustomType}">
        ...

还有其他方法吗?

这是因为字典中的资源是静态的。一旦它们被使用,它们将不会被更新。您可以尝试重新加载字典,但这只会更新新控件,而不会更新旧控件

如果您希望支持多个DataTemplates,可以考虑DATATEMPLEPTESLECTROR类,它将根据您的条件选择模板:

如果您需要在“飞”中切换模板,您可以始终考虑使用控件模板和控件的模板属性的绑定…

{Binding Converter={StaticResource YourAwesomeTemplateSwitcherConverter}}

HTH

一个对我有效的临时解决方案是在视图上调用UpdateLayout()。为什么要删除模板?@Krzysztof Skowronek man,这个问题已经存在10年了。你真的希望我记住这个细节吗?对不起,我没有注意到:(
{Binding Converter={StaticResource YourAwesomeTemplateSwitcherConverter}}