2008-11-26 54 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