Ben böyle bir sınıfı bir şey var: başka bir sınıfta bulunanÖzyineli DataTemplates mümkün mü?
public class Section
{
private IEnumerable<Section> sections;
private IEnumerable<KeyValuePair<string, string>> attributes
public string Name {get;set;}
public IEnumerable<Section> Sections
{
get {return sections;}
}
public IEnumerable<KeyValuePair<string, string>> Attributes
{
get {return attributes;}
}
public Section(...)
{
//constructor logic
}
}
, etrafında sarar ve bir ObjectDataProvider WPF kullanılan Tartışmanın iyiliği için OtherClass
arama sağlar. Görebildiğiniz gibi, Section
örneğinin bir örneği, Section
'un diğer birçok örneğini içerebilir.
Bu yinelemeyle ilgilenen bir şablon oluşturmak için XAML'de bir yol var mı?
<UserControl x:Class="OtherClassEditor"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:OtherClassNS="clr-namespace:NameSpace"
Height="300" Width="300">
<UserControl.Resources>
<ObjectDataProvider ObjectType="{x:Type OtherClassNS:OtherClass}" x:Key="ViewModel" />
<DataTemplate x:Key="listViewAttr">
<WrapPanel>
<TextBlock Text="{Binding Path=Key}"></TextBlock><TextBlock Margin="0,0,4,0">: </TextBlock>
<TextBlock Text="{Binding Path=Value}"></TextBlock>
</WrapPanel>
</DataTemplate>
<DataTemplate x:Key="listViewSection">
<StackPanel>
<WrapPanel Margin="0,0,0,8">
<TextBlock Margin="0,0,4,0">Section:</TextBlock>
<TextBlock Text="{Binding Path=Name}"/>
</WrapPanel>
</StackPanel>
</DataTemplate>
<DataTemplate x:Key="listViewData">
<StackPanel>
<WrapPanel Margin="0,0,0,8">
<TextBlock Margin="0,0,4,0">Section: </TextBlock>
<TextBlock Text="{Binding Path=Name}"/>
<ListView DataContext="{Binding Path=Sections}" ItemTemplate="{StaticResource listViewSection}" ItemsSource="{Binding Sections}">
</ListView>
<ListView DataContext="{Binding Path=Attributes}" ItemsSource="{Binding Attributes}" ItemTemplate="{StaticResource listViewAttr}">
</ListView>
</WrapPanel>
</StackPanel>
</DataTemplate>
</UserControl.Resources>
<Grid>
<ListView DataContext="{StaticResource ViewModel}" ItemTemplate="{StaticResource listViewData}" ItemsSource="{Binding Sections}">
</ListView>
</Grid>
</UserControl>
Ama DataTemplate
sadece ondan önce bildirilmiş bir referans alabilir gibi Özyinelemeyi alamayan:
Bu defa ne var olduğunu.
Bu XAML'de yapılabilir mi? Öyleyse nasıl? Bu kod arkasında yapmam gereken bir şey mi?
DataTemplates yoldayken bile mi? Bu verileri görüntülemek ve düzenlemek için daha iyi bir yol var mı?
StaticResource yerine DynamicResource kullanırsanız bu işe yarar mı? Çalışırsa ilginç olurdu, ancak şablon sonsuz bir tekrarlamaya neden olursa ne olacağını görmek istemem. –
Bunu düşünmemiştim! İşe yaramıyor, ama ben HierarchicalDataTemplate'ın görünümünü seviyorum. Amaca daha uygun görünüyor. –