问题描述
我有一个需要屏蔽的字段,但是屏蔽格式可以根据实际记录而有所不同。该表包含规格记录,每种规格类型可以具有不同的精度。我无法在Xaml代码中设置此精度。
我尝试了以下操作:
<inf:NumericField Name="ResultQty" Label="Test Results" Width="100" HorizontalContentAlignment="Center" Mask="{Binding FormatDesc}"/>
和
<inf:NumericField Name="ResultQty" Label="Test Results" Width="100" HorizontalContentAlignment="Center" Format="{Binding FormatDesc}"/>
FormatDesc为此记录返回###,## 0.000,并且ResultQty为0.2720。应该显示为0.272,但显示为0.27。
是否可以将FormatDesc属性绑定到Xaml中的字段,还是应该寻找其他方法?
解决方法
On the Infragistics site there is the following explanation for a similar problem:
XamDataGrid
中的字段不是WPF中的可视元素,因此 无法直接绑定到数据上下文,因为它们不会公开一个 继承自FrameworkElement
。为了绑定属性的非可视元素
XamDataGrid
,例如Field
,FieldSettings
或FieldLayoutSettings
,我 建议使用FieldBinding
。您可以阅读有关FieldBinding
的信息 在XamDataGrid
中: https://www.infragistics.com/help/wpf/xamdatagrid-binding-field-fieldlayout-to-mvvm.
因此,建议在Infragistics网站上使用FieldBinding
标记扩展名,以便将属性绑定到Field
,FieldSettings
或FieldLayoutSettings
。
虽然提到的文章包括使用MVVM模式的示例,但FieldBinding
标记扩展可以不使用它。
例如,假设使用以下数据模型:
public class TestReportProvider : ObservableModel
{
public TestReportProvider()
{
}
public string QtyFormat { get; set; } = "###,##0.000";
private ObservableCollection<Test> _tests = null;
public ObservableCollection<Test> Tests
{
get
{
return this._tests;
}
set
{
if (this._tests != value)
{
this._tests = value;
this.OnPropertyChanged("Tests");
}
}
}
//…
}
在代码后方设置DataContext
:
public partial class FieldBindingExample : Window
{
public TestReportProvider ReportData = new TestReportProvider();
public FieldBindingExample()
{
InitializeComponent();
DataContext = ReportData;
}
//…
}
现在为DataSource
设置XamDataGrid
并使用FieldBinding
标记扩展名:
<Grid>
<igDP:XamDataGrid DataSource="{Binding Path=Tests}" AutoFit="True">
<igDP:XamDataGrid.FieldLayoutSettings>
<igDP:FieldLayoutSettings AutoGenerateFields="False"
AutoFitMode="Always"
AddNewRecordLocation="OnTopFixed"/>
</igDP:XamDataGrid.FieldLayoutSettings>
<igDP:XamDataGrid.FieldLayouts>
<igDP:FieldLayout>
<igDP:FieldLayout.Fields>
<igDP:TextField Name="TestDescription" Label="Test Description" />
<igDP:NumericField Name="Result" Label="Result" />
<igDP:NumericField Name="Average" Label="Average Deviation"
Format="{igDP:FieldBinding QtyFormat}" />
</igDP:FieldLayout.Fields>
</igDP:FieldLayout>
</igDP:XamDataGrid.FieldLayouts>
</igDP:XamDataGrid>
</Grid>