我有以下课程:
public class MyClass
{
public MyClass()
{
OtherClass = new List<OtherClass>();
}
public List<OtherClass> OtherClass { get; set; }
}
OtherClass包含:
public class OtherClass
{
public OtherClass ()
{
}
public string Name { get; set; }
}
以及以下xaml
MyView
:<DataTemplate DataType="{x:Type Framework:MyClass}">
<StackPanel>
<Label FontSize="20" Content="{Binding Path=OtherClass.Name}" />
</StackPanel>
</DataTemplate>
在
MyWindow
引用MyView
中:<TabItem Header="My Class">
<Views:MyView DataContext="{Binding Path=MyClass}" />
</TabItem>
我已经看到了绑定nested properties的其他示例,这些示例表明
Binding Path
这样的方式(即OtherClass.Name
)可以对单个对象正常工作。但是,我绑定的是对象列表,而不是单个对象(在我的示例中为OtherClass
列表)。是否可以绑定对象列表?
最佳答案
如果要为DataTemplate
创建MyClass
,则需要使用某种形式的ItemsControl
来显示OtherClass
列表属性
<DataTemplate DataType="{x:Type Framework:MyClass}">
<ItemsControl ItemsSource="{Binding OtherClass}" DisplayMemberPath="Name"/>
</DataTemplate>
OtherClass.Name
也必须是公共财产,而不是目前的私有财产public class OtherClass
{
public OtherClass ()
{
}
public string Name { get; set; }
}
编辑
DisplayMemberPath
是显示单个属性的最简单方法,但是如果要显示OtherClass
类中的一个或多个属性,或者更改其格式,则需要定义ItemsControl.ItemTemplate
并告诉ItemsControl
如何显示每个属性项目<ItemsControl ItemsSource="{Binding OtherClass}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Name}"/>
<!-- more properties that you want to display -->
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>