2013-07-29 31 views
2

我在WPF列表框將包含的ResultsViewModel項目,列表但這些對象的實際運行時類型可能是WPF設定的DataTemplate上ViewModel類編程

  • CalculateResultsViewModel
  • ScenarioResultsViewModel
  • GraphResultsviewModel etc等,

所有這些擴展基抽象類ResultsViewModel

這些視圖模型中的每一個在ListBox中的顯示都不同,因此需要不同的DataTemplate。我只用XAML就可以做到這一點。難度在於,當視角模型是「處理」或者失敗時「,我需要它們顯示」處理「或」錯誤「的DataTemplate,我只能使用Triggers這樣做,但這意味着我可以「T使用DataTemplateSelector或基本XAML的風格。

我能想到的(不乾淨,我知道)是設置DataTemplate程序中的每個視圖模型類,這是的SetResult()方法唯一的解決辦法是什麼被當被叫處理完成或者成功或者出現錯誤在那DependencyProperty我可以看看返回代碼,然後根據成功/失敗結果以編程方式設置DataTemplate唯一的問題是我無法弄清楚如何

  1. 獲得一個ResourceDictionary一個DataTemplate資源只是用C#代碼 - 銘記林呼籲所有這一切都從視圖模型類,而不是窗口代碼隱藏文件.xaml.cs因此它不會訪問僅具有一個句柄視圖模型類的Window

  2. 性能,以某種方式獲得到包含它,然後編程方式設置此容器上的DataTemplateListBoxItem的參考。

任何人都可以指向正確的方向嗎?

回答

2

你可以把魔法與隱含的DataTemplates

<ListBox ItemSource={Binding YourResults}> 
    <ListBox.Resources> 
    <DataTemplate DataType={x:Type CalculateResultsViewModel}> 
     <Grid></Grid> 
    </DataTemplate> 
    <DataTemplate DataType={x:Type ScenarioResultsViewModel}> 
     <Grid></Grid> 
    </DataTemplate> 
    <DataTemplate DataType={x:Type GraphResultsviewModel }> 
     <Grid></Grid> 
    </DataTemplate> 
    </ListBox.Resources> 
</ListBox> 

的「處理」,「差錯」的ViewModels您可以指定所有YOUT的DataTemplates一個裝飾器覆蓋(OK,但你必須使用觸發器)

希望這有助於