Hi!
Ich hab ein Treeview, welches zwei Arten von Nodes Darstellt: FileSystemNode für Dateien und DirectoryNode für Directories.
Da habe ich nun 2 fast identische DataTemplates drin, und iwie die Vorstellung, man müsstedoch deren Inhalt iwie auslagern und durch ein irgendwie geartetes Verweisen wiederverwenden können - gibts da nicht eine Möglichkeit?
<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525"
xmlns:my="clr-namespace:WpfFilesystemTreeView"
DataContext="{Binding Source={StaticResource Root}}">
<Grid>
<TreeView Grid.Row="1" ItemsSource="{Binding Path=FileSystemTree.Roots}" >
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type my:DirectoryNode}"
ItemsSource="{Binding Path=Childs}">
<StackPanel Orientation="Horizontal">
<Image Width="16" Height="16" Source="/Icons/Folder.ico" />
<TextBlock Margin="2 1 0 1" Text="{Binding Path=Item.Name}" />
</StackPanel>
</HierarchicalDataTemplate>
<DataTemplate DataType="{x:Type my:FileSystemNode}" >
<StackPanel Orientation="Horizontal">
<Image Width="16" Height="16" Source="/Icons/File.ico" />
<TextBlock Margin="2 1 0 1" Text="{Binding Path=Item.Name}" />
</StackPanel>
</DataTemplate>
</TreeView.Resources>
</TreeView>
</Grid>
</Window>
Der frühe Apfel fängt den Wurm.
Deine fast gleichen Datatemplates unterscheiden sich ja im Image - wenn du z.B. aus der hardcodierten Source ein ...
<Image Width="16" Height="16" Source="{Binding MyImage}" />
... machst sind die DataTemplates identisch und du kannst das einmal definieren und zweimal referenzieren.
Ich sehe in dem Falle aber kein grossen Problem von redundantem XAML. XAML ist in vielen belangen redundanter als Code...