绑定到集合的属性

本文关键字:属性 集合 绑定 | 更新日期: 2023-09-27 17:57:30

上下文

WPF数据网格允许开发人员手动将每一列绑定到ItemsSource的一个属性,如下所示:

<DataGrid ItemsSource="{Binding People}" AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding Name}"/>
        <DataGridTextColumn Binding="{Binding Age}"/>
        <DataGridTextColumn Binding="{Binding Country}"/>
    </DataGrid.Columns>
</DataGrid>

这些列绑定的优点是,如果绑定与People集合中对象的属性不对应,Visual Studio将显示设计时警告。它还将通过intellisense提供有效属性的列表。

我正在开发一种不同类型的网格,但在获得此功能时遇到了问题。目前我已经开发了这样的东西:

<my:Grid ItemsSource="{Binding People}">
    <my:Column Property="Name" />
    <my:Column Property="Age" />
    <my:Column Property="Country" />
</my:Grid>

在内部,这些基于字符串的属性是通过类型查找的。运行时的GetProperty()。

我的问题

如何实现像DataGrid示例中那样的属性绑定?我查看了DataGrid的反编译源,发现DataGridBoundColumn.Binding的类型是BindingBase。

我将BindingBase重新分配到我的自定义网格中,但我仍然没有得到强大的类型或智能感知选项,可能是因为BindingBase不知道它适用于什么类型,但我不知道如何为它提供所需的上下文。

绑定到集合的属性

将属性my:Column.property的实现更改为依赖属性。这将允许您使用绑定,也许会有所帮助。但绑定的智能感知更多的是VS XAML设计器的问题,而不是您的代码。

//http://msdn.microsoft.com/en-us/library/ms752914(v=vs.110).aspx
public static readonly DependencyProperty PropertyProperty = 
DependencyProperty.Register(
"Property", typeof(Boolean),
);
public bool IsSpinning
{
get { return (bool)GetValue(PropertyProperty ); }
set { SetValue(PropertyProperty , value); }
}