Laden...

Redundantes Xaml

Erstellt von ErfinderDesRades vor 12 Jahren Letzter Beitrag vor 12 Jahren 711 Views
ErfinderDesRades Themenstarter:in
5.299 Beiträge seit 2008
vor 12 Jahren
Redundantes Xaml

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.

I
8 Beiträge seit 2010
vor 12 Jahren

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