WPF 绑定到 XamDataGrid 中的父对象

WPF Binding to parent object in an XamDataGrid

我继承了一个使用 WPF 的遗留项目。我们利用 Infragistics。 下面是一个虚构的 class 结构:

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 和 select 字段 ViewName

如果我这样做

<igDP:Field Name="DogName " Label="{Binding ViewName}" AllowEdit="False" />

DogName 被输出为我正在查看 Dog 对象,而不是 DogsVM 对象。如何获取标签绑定中的父对象?

所以您有一些带有 属性 名为 CollectionView 的对象。该对象是 XamDataGrid 的 DataContext。您应该将字符串 属性 添加到 that 相同的对象,该对象具有您要用于该字段标签的值。然后使用 FieldBinding 将字段的 属性 绑定到那个 属性。如果该对象是 DogsVM class 并且您只是不在那里显示 CollectionView 那么它将类似于 {FieldBinding ViewName}.

On the Infragistics site there is the following explanation for a similar problem:

Fields in the XamDataGrid are not visual elements in WPF, and as such cannot be bound directly to a data context, as they do not expose one inherited from FrameworkElement.

In order to bind the properties of the non-visual elements of the XamDataGrid such as Field, FieldSettings, or FieldLayoutSettings, I would recommend using a FieldBinding. You can read about FieldBinding in the XamDataGrid here: https://www.infragistics.com/help/wpf/xamdatagrid-binding-field-fieldlayout-to-mvvm.

因此,在 Infragistics 网站上,建议使用 FieldBinding 标记扩展,以便将属性绑定到 FieldFieldSettingsFieldLayoutSettings
虽然提到 post 包括使用 MVVM 模式的示例,但 FieldBinding 标记扩展可以在没有它的情况下使用。

与上述问题相关考虑在构造函数中设置DataContext

public YouWindowConstructor()
{        
    InitializeComponent();
    DataContext = new DogsVM();
}

现在为 XamDataGrid 设置 DataSource 并使用 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>        
    

查看类似内容: