2008-11-26 83 views
4

我使用MVVM体系结构来解耦我的应用程序。也就是说,你经常看到驻留在资源字典在自己的XAML文件类似在运行时切换数据模板 - 刷新问题

var u = new UserControl(); 
u.Content = new MyCustomType(); // MyCustomType is not a control 

用户界面是通过数据模板定义

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

我在应用程序启动时加载的资源和应用程序高兴地展示我的用户界面。但是,如果我删除数据模板并添加一个新的数据模板(相同的键,相同的数据类型),UI仍然使用旧的数据模板。当然,我可以重新设置我的容器的内容,以强制刷新,但是这似乎是愚蠢的,因为我必须通知有关的变更都控制,这样

var tmp = control.Content; 
control.Content = null; 
control.Content = tmp; // New data template will be used 

任何其他方法?谢谢!

回答

4

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

如果您希望支持多个DataTemplates,您可以考虑DataTemplateSelector类,它将根据您的条件选择一个模板: http://msdn.microsoft.com/en-us/library/system.windows.controls.datatemplateselector.aspx

如果你需要“对飞”切换模板,你总是可以考虑使用CONTROLTEMPLATES和控件的Template属性绑定...

{Binding Converter={StaticResource YourAwesomeTemplateSwitcherConverter}} 

HTH

+0

为我工作的临时解决方案是在视图上调用UpdateLayout()。 – Kolky 2012-04-02 14:17:56