如何从另一个字段屏蔽WPF Infragistics NumericField

问题描述

我有一个需要屏蔽的字段,但是屏蔽格式可以根据实际记录而有所不同。该表包含规格记录,每种规格类型可以具有不同的精度。我无法在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,例如FieldFieldSettingsFieldLayoutSettings,我 建议使用FieldBinding。您可以阅读有关FieldBinding的信息 在XamDataGrid中: https://www.infragistics.com/help/wpf/xamdatagrid-binding-field-fieldlayout-to-mvvm.

因此,建议在Infragistics网站上使用FieldBinding标记扩展名,以便将属性绑定到FieldFieldSettingsFieldLayoutSettings
虽然提到的文章包括使用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>

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...