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
标记扩展,以便将属性绑定到 Field
、FieldSettings
或 FieldLayoutSettings
。
虽然提到 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>
查看类似内容:
我继承了一个使用 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 fromFrameworkElement
.In order to bind the properties of the non-visual elements of the
XamDataGrid
such asField
,FieldSettings
, orFieldLayoutSettings
, I would recommend using aFieldBinding
. You can read aboutFieldBinding
in theXamDataGrid
here: https://www.infragistics.com/help/wpf/xamdatagrid-binding-field-fieldlayout-to-mvvm.
因此,在 Infragistics 网站上,建议使用 FieldBinding
标记扩展,以便将属性绑定到 Field
、FieldSettings
或 FieldLayoutSettings
。
虽然提到 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>
查看类似内容: