我有以下课程:

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>

10-07 12:00