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

C# 如何从另一个字段屏蔽WPF Infragistics NumericField,c#,wpf,xaml,infragistics,masking,C#,Wpf,Xaml,Infragistics,Masking,我有一个需要屏蔽的字段,但屏蔽格式可能因实际记录而异。该表包含规范记录,每种类型的规范可能具有不同的精度。我无法在Xaml代码中设置此精度 我尝试了以下方法: <inf:NumericField Name="ResultQty" Label="Test Results" Width="100" HorizontalContentAlignment="Center" Mask="{Binding Fo

我有一个需要屏蔽的字段,但屏蔽格式可能因实际记录而异。该表包含规范记录,每种类型的规范可能具有不同的精度。我无法在Xaml代码中设置此精度

我尝试了以下方法:

 <inf:NumericField Name="ResultQty" Label="Test Results" Width="100" HorizontalContentAlignment="Center" Mask="{Binding FormatDesc}"/>


FormatDesc为此记录返回####,##0.000,结果质量为0.2720。它应显示为0.272,但显示为0.27

是否有办法将FormatDesc属性绑定到Xaml中的字段,或者我应该寻找其他方法?

XamDataGrid
中的字段不是WPF中的可视元素,因此 无法直接绑定到数据上下文,因为它们不公开数据上下文 继承自
FrameworkElement

为了绑定
XamDataGrid
字段
字段设置
,或
字段布局设置
,I 建议使用
字段绑定
。您可以阅读关于
FieldBinding
XamDataGrid
中:

因此,建议在Infragistics网站上使用
字段绑定
标记扩展,以便将属性绑定到
字段
字段设置
字段布局设置

虽然上面提到的文章包含了使用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");
            }
        }
    }
    //… 
}
public partial class FieldBindingExample : Window
{
    public TestReportProvider ReportData = new TestReportProvider();
    public FieldBindingExample()
    {        
        InitializeComponent();
        DataContext = ReportData;
    }
    //…
}
<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>
现在为
XamDataGrid
设置
DataSource
,并使用
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");
            }
        }
    }
    //… 
}
public partial class FieldBindingExample : Window
{
    public TestReportProvider ReportData = new TestReportProvider();
    public FieldBindingExample()
    {        
        InitializeComponent();
        DataContext = ReportData;
    }
    //…
}
<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>


在调试器中运行应用程序并查看输出日志。可能存在类似于
System.Windows.Data错误的消息:2:找不到目标元素的治理FrameworkElement或FrameworkContentElement…
?因此输出给出以下System.Windows.Data错误:2:找不到目标元素的治理FrameworkElement或FrameworkContentElement。BindingExpression:Path=SelectedIssue.contractsusespectdev.FailingTestResults.FormatDesc;DataItem=null;目标元素是'NumericField'(HashCode=53877781);目标属性为“格式”(类型为“字符串”)