2010-11-18 11 views
1

Ich habe zwei einfache ViewModels, NodeViewModel und LeafViewModel, die Elemente in einem TreeView sein können. Genau wie unten. Templates werden implizit angewendet, weil ich keinen benutzerdefinierten Template-Selektor möchte.implizite DataTemplates versus Beispieldaten vs. Mischbarkeit

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

Wie kann ich Beispieldaten in Mischung erzeugen, die einen Baum mit beide NodeViewModel s enthält und LeafViewModel s und es dann als die Daten, die in der Baumstruktur angezeigt werden, während immer noch implict Vorlagenauswahl mit?

Antwort

1

In Ermangelung einer irgendwie spottenden Framework habe ich festgestellt, dass der einfachste Weg, dies zu tun ist, nur eine Klasse zusammenhacken, die Instanzen meiner Ansicht Modelle generiert und es als Datenquelle in Blend verwenden.

Es fällt mir ein, dass es vielleicht noch einfacher ist, die Testdaten in XAML zu definieren, obwohl dies davon abhängt, dass die Klassen des Ansichtsmodells dies erlauben (z. B. mit parameterlosen Konstruktoren und einem ContentProperty Attribut)).

0

Ich denke, die Antwort ist einfach: Sie können nicht.

Die Mischung funktioniert nicht wirklich gut mit impliziten Datentypen und Vorlagenselektoren. Dies gilt nicht nur für Beispieldaten, sondern auch für die Bearbeitung von Inplace Wysiwyg-Vorlagen. Aus diesem Grund sollten Sie versuchen, implizite Vorlagen und Vorlagen-Selektoren zu vermeiden, wann immer Sie können.