2010-11-18 28 views
1

我有兩個簡單的ViewModels,NodeViewModelLeafViewModel,它們可以是TreeView中的項目。就像下面一樣。模板被暗中應用,因爲我不需要自定義模板選擇器。隱式DataTemplates與示例數據vs.可混合性

<UserControl x:Class="MyProject.UserControl1" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:ViewModels="clr-namespace:MyProject.ViewModels" mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="300" d:DataContext="{d:DesignData /SampleData/NodeViewModelSampleData.xaml}"> 
<UserControl.Resources> 
    <HierarchicalDataTemplate DataType="{x:Type ViewModels:NodeViewModel}" ItemsSource={Binding Children}> 
    <StackPanel Orientation="Horizontal"> 
    <CheckBox Content="{Binding Name}" IsChecked="{Binding Result}"/> 
    </StackPanel> 
    </HierarchicalDataTemplate> 
    <HierarchicalDataTemplate DataType="{x:Type ViewModels:LeafViewModel}"> 
    <StackPanel Orientation="Horizontal"> 
    <TextBlock Text="{Binding Name}" /> 
    </StackPanel> 
    </HierarchicalDataTemplate> 
</UserControl.Resources> 
<TreeView ItemsSource="{Binding Children}" /> 
</UserControl> 

我怎麼能生成一個包含樹都NodeViewModel S和LeafViewModel S混合物樣本數據,然後同時仍然使用隱式的模板選擇顯示爲樹形視圖中的數據?

回答

1

在沒有使用某種模擬框架的情況下,我發現最簡單的方法是將一個類生成我的視圖模型的實例,並將其用作Blend中的數據源。

在我看來,在XAML中定義測試數據可能會更容易,儘管這取決於視圖模型類的設計以允許這樣做(例如,使用無參數構造函數和ContentProperty屬性等等)。

0

我認爲答案很簡單:你不能。

Blend與隱式數據模板和模板選擇器並不能很好地協作。這不僅適用於樣本數據,還適用於wysiwyg模板編輯。因此,爲了可混合性,您應儘可能避免暗含模板和模板選擇器。