XAML WPF绑定到XamDataGrid中的父对象

bakd9h0s  于 2023-09-28  发布在  其他
关注(0)|答案(2)|浏览(119)

我继承了一个使用WPF的遗留项目。我们使用Infragistics。
下面是一个组成的类结构:

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是DataSource="{Binding CollectionView}"
当我输出字段时,我使用以下命令

<igDP:Field Name="DogName " Label="Dog Name" AllowEdit="False" />

我想改变标签从DogsVM和选择字段ViewName
如果我做

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

DogName被输出,因为我正在查看Dog对象,而不是DogsVM对象。我怎样才能到达标签绑定中的父对象?

t5fffqht

t5fffqht1#

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

8hhllhi2

8hhllhi22#

On the Infragistics site there is the following explanation for a similar problem:
XamDataGrid中的字段不是WPF中的可视元素,因此不能直接绑定到数据上下文,因为它们不公开从FrameworkElement继承的数据上下文。
为了绑定XamDataGrid的非视觉元素的属性,如FieldFieldSettingsFieldLayoutSettings,我建议使用FieldBinding。您可以在XamDataGrid中阅读有关FieldBinding的信息:https://www.infragistics.com/help/wpf/xamdatagrid-binding-field-fieldlayout-to-mvvm.
因此,在Infragistics网站上建议使用FieldBinding标记扩展,以便将属性绑定到FieldFieldSettingsFieldLayoutSettings
虽然提到的帖子包括使用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>

参见类似内容:https://stackoverflow.com/a/64545966/6630084

相关问题