繁体   English   中英

属性设置器会修剪从LINQ分配的值,但在WPF数据网格中不会这样显示

[英]Property setter trims a value assigned from LINQ, but isn't displayed as such in WPF datagrid

我正在使用LINQ to ODBC将查询结果(保存到XML文件)投影到自定义对象中。 自定义对象具有字符串属性“ PayFrequency”。 如果值不为null,则它的设置器将修剪分配给它的值。 我已经打开了XML文件并确认此文件有效(属性值被修剪)。

但是,当自定义对象反序列化并显示在WPF数据网格中时,我的属性的DataGridComboBoxColumn列值为空白。 列的ItemsSource绑定到字符串的StaticResource,该字符串包括分配给我的自定义对象的PayFrequency属性的值。 那么,为什么我的价值没有显示在数据网格中?

PayFrequency属性:

    [XmlElement(IsNullable = true)]
    public string PayFrequency
    {
        get { return this.payFrequency; }
        set
        {
            if (value != this.payFrequency)
            {
                this.payFrequency = (value ?? value.Trim());
                NotifyPropertyChanged("PayFrequency");
            }
        }
    }

WPF datagrid列:

<DataGridComboBoxColumn
    Header="Pay Frequency"
    SelectedItemBinding="{Binding XLGOCommission.PayFrequency, Mode=TwoWay}"
    ItemsSource="{Binding Source={StaticResource xlgoPayFrequencyStrings}}" />

WPF datagrid列的ItemsSource:

   <x:Array Type="{x:Type sys:String}" x:Key="xlgoPayFrequencyStrings">
        <sys:String>APM</sys:String>
        <sys:String>APQ</sys:String>
        <sys:String>OD</sys:String>
        <sys:String>NP</sys:String>
    </x:Array>

重要的一点:如果我在LINQ查询中修剪该值,而不是让自定义对象的setter属性对其进行处理,则该值会正确显示在WPF datagrid列中。 但是,就像我说的那样,当我查看序列化为XML的自定义对象时,属性值中没有空格。

这是我的创可贴修复程序(摘录自我的LINQ查询):

PayFrequency = xcom["pay_freq"].ToString().Trim()

谢谢你的帮助! 我宁愿将对分配给我的自定义对象的值的操作封装在对象本身中,而不是“清白”其他地方的值!

这行是不正确的。 它只会尝试修剪value null的值,这将生成运行时异常...

this.payFrequency = (value ?? value.Trim());

仅当它不为null时修剪它的一种方法是改用三元运算符...

if (value != this.payFrequency)
{
    this.payFrequency = (value == null ? "" : value.Trim());
    NotifyPropertyChanged("PayFrequency");
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM