代码之家  ›  专栏  ›  技术社区  ›  bitbonk

隐式数据模板vs.样本数据vs.可混合性

  •  1
  • bitbonk  · 技术社区  · 14 年前

    我有两个简单的视图模型, NodeViewModel LeafViewModel 可以是树视图中的项目。就像下面一样。模板是隐式应用的,因为我不需要自定义模板选择器。

    <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>
    

    如何在blend中生成包含两个树的样本数据 节点模型 s和 叶视图模型 然后在仍然使用隐式模板选择时将其显示为treeview中的数据?

    2 回复  |  直到 14 年前
        1
  •  1
  •   Robert Rossney    14 年前

    在没有使用某种模拟框架的情况下,我发现最简单的方法是将生成视图模型实例的类组合在一起,并将其用作Blend中的数据源。

    我突然想到,在XAML中定义测试数据可能会更容易,尽管这取决于设计的视图模型类是否允许这样做(例如,使用无参数构造函数和 ContentProperty 属性等等)。

        2
  •  0
  •   bitbonk    14 年前

    我想答案很简单:你不能。

    Blend在隐式数据模板和模板选择器中并不能很好地工作。这不仅适用于示例数据,还适用于就地所见即所得模板编辑。因此,对于可混合性,您应该尽可能避免隐式模板和模板选择器。

    推荐文章