【问题标题】:Bind collection of custom objects to custom controls in a stackpanel将自定义对象的集合绑定到堆栈面板中的自定义控件
【发布时间】:2020-05-17 07:15:15
【问题描述】:

我有一个UserControl,是我用几个Labels 制作的,用于显示我编写的自定义类的信息,其中包含保存Labels 必须显示的数据的字段。

我将拥有该类的一组对象,我想在我的 WPF 窗口中以水平方式将它们显示在另一个下方。

我想使用StackPanel,因为我对 WPF 了解不多,无法想到其他可以做到这一点的控件。所以我四处寻找将集合绑定到StackPanel 的方法。

我发现了这些问题:Q1Q2Q3

但是,简单地将我的 UserControl 放在 DataTemplate 中是行不通的,而且我不知道如何告诉 WPF - 获取这个对象集合并将每个对象绑定到我的 UserControl 的一个实例并堆叠它们在这个 StackPanel 中。

我更愿意为此主要使用 XAML,因此非常感谢 WPF 数据绑定的回答,谢谢!

【问题讨论】:

标签: c# wpf data-binding user-controls


【解决方案1】:

您需要将 DataContext 设置为具有您的自定义对象集合(例如 MyObjectcollection)的 ViewModel,然后按如下方式设置绑定:

<ItemsControl ItemsSource="{Binding MyObjectCollection}">
<ItemsControl.ItemsPanel>
    <ItemsPanelTemplate>
        <StackPanel Orientation="Vertical" IsItemsHost="True"/>
    </ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
    <DataTemplate>
        <MyUserControl />
    </DataTemplate>
</ItemsControl.ItemTemplate>

【讨论】:

  • "将每个对象绑定到我的 UserControl 的一个实例" - UserControl 应该在 DataTemplate 中声明。如果控件公开可绑定属性,它们应该绑定到项目的属性,即“自定义对象”。否则,UserControl 也可以直接绑定到该对象,该对象将自动传递给它的 DataContext。因此,DataTemplate 将只包含 &lt;local:MyUserControl/&gt;。但是请确保 UserControl 没有明确设置自己的 DataContext 属性。
  • 已经对其进行了调整,因此数据模板使用您的用户控件
猜你喜欢
  • 1970-01-01
  • 2013-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多