我继承了一个使用WPF的遗留项目。我们利用基础设施。
下面是一个虚构的类结构:
public class DogsVM
{
public string ViewName { get; set; } = "My Dogs";
public List<Dog> Dogs { get; set; }
}
public class Dog
{
public string DogName { get; set; }
public string Description { get; set; }
}
我正在使用
XamDataGrid
显示我的数据。
目前
XamDataGrid
上的数据源是DataSource="{Binding CollectionView}"
。
当我输出字段时,我使用以下内容
<igDP:Field Name="DogName " Label="Dog Name" AllowEdit="False" />
我希望将标签更改为
DogsVM
并选择字段 ViewName
如果我这样做
<igDP:Field Name="DogName " Label="{Binding ViewName}" AllowEdit="False" />
当我查看 Dog
对象时,会输出
DogName,而不是
DogsVM
对象。如何获取标签绑定中的父对象?
因此,您有一些具有名为 CollectionView 属性的对象。该对象是 XamDataGrid 的 DataContext。您应该将一个字符串属性添加到 that 同一对象,该对象具有要用于该字段标签的值。然后使用 FieldBinding 将字段的属性绑定到该属性。如果该对象是 DogsVM 类,并且您只是不在那里显示 CollectionView 那么它将类似于
{FieldBinding ViewName}
。
因此,在 Infragistics 站点上建议使用
XamDataGrid
中的字段不是 WPF 中的可视元素,因此 不能直接绑定到数据上下文,因为它们不公开数据上下文 继承自FrameworkElement
。为了绑定非可视元素的属性
XamDataGrid
例如Field
、FieldSettings
或FieldLayoutSettings
,我 建议使用FieldBinding
。您可以阅读有关FieldBinding
在XamDataGrid
这里:https://www.infragistics.com/help/wpf/xamdatagrid-binding-field-fieldlayout-to-mvvm。
FieldBinding
标记扩展,以便将属性绑定到
Field
、
FieldSettings
或
FieldLayoutSettings
。虽然提到的帖子包含使用 MVVM 模式的示例,但无需它即可使用
FieldBinding
标记扩展。
与上面的问题相关,考虑在构造函数中设置DataContext
:
public YouWindowConstructor()
{
InitializeComponent();
DataContext = new DogsVM();
}
现在为 DataSource
设置
XamDataGrid
并使用
FieldBinding
标记扩展:
<igDP:XamDataGrid DataSource="{Binding Path=Dogs}" AutoFit="True">
<igDP:XamDataGrid.FieldLayoutSettings>
...
<igDP:XamDataGrid.FieldLayouts>
<igDP:FieldLayout>
<igDP:FieldLayout.Fields>
...
<igDP:Field Name="DogName" Label="{igDP:FieldBinding ViewName}" AllowEdit="False" />
...
</igDP:FieldLayout.Fields>
</igDP:FieldLayout>
</igDP:XamDataGrid.FieldLayouts>
</igDP:XamDataGrid>
参见类似: