неявные DataTemplates против образцов данных против смешиваемости - PullRequest
1 голос
/ 18 ноября 2010

У меня есть две простые ViewModels, NodeViewModel и LeafViewModel, которые могут быть элементами в TreeView.Прямо как ниже.Шаблоны применяются неявно, потому что я не хочу пользовательский селектор шаблонов.

<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, который содержит дерево с NodeViewModel s и LeafViewModel s, и затем отобразить их как данные в древовидном представлении, все еще используя выбор шаблона Implict?

Ответы [ 2 ]

1 голос
/ 19 ноября 2010

В отсутствие использования какой-либо среды для моделирования я обнаружил, что самый простой способ сделать это - просто взломать класс, который генерирует экземпляры моих моделей представлений, и использовать его в качестве источника данных в Blend.

Мне кажется, что может быть даже проще просто определить тестовые данные в XAML, хотя это зависит от классов модели представления, предназначенных для этого (например, с помощью конструкторов без параметров и атрибута ContentProperty, среди прочих). вещи).

0 голосов
/ 30 ноября 2010

Я думаю, что ответ прост: вы не можете.

Blend не очень хорошо работает с неявными шаблонами данных и селекторами шаблонов. Это относится не только к образцам данных, но и к редактированию шаблонов на месте. Поэтому для смешиваемости вы должны стараться избегать шаблонов и селекторов шаблонов, когда это возможно.

...