10

如何将 WPFDataGridTextColumn文本限制为 10 个字符的最大长度。

我不想使用DatagridTemplateColumn,因为它有内存泄漏问题。

该字段还绑定到数据实体模型。

4

2 回答 2

17

如果您不想使用,DatagridTemplateColumn则可以在此处更改DataGridTextColumn.EditingElementStyle并设置TextBox.MaxLength

<DataGridTextColumn Binding="{Binding Path=SellingPrice, UpdateSourceTrigger=PropertyChanged}">
   <DataGridTextColumn.EditingElementStyle>
      <Style TargetType="{x:Type TextBox}">
         <Setter Property="MaxLength" Value="10"/>
      </Style>
   </DataGridTextColumn.EditingElementStyle>
</DataGridTextColumn>
于 2013-09-26T13:27:57.587 回答
1

我知道我有点挖坟,但我想出了另一个我在其他地方找不到的解决方案。它涉及使用价值转换器。有点hacky,是的,但它的优点是它不会用很多行污染xaml,如果你想将它应用于许多列,这可能很有用。

以下转换器完成了这项工作。只需App.xamlApplication.Resources:下添加以下引用<con:StringLengthLimiter x:Key="StringLengthLimiter"/>,其中con转换器的路径是App.xaml.

public class StringLengthLimiter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if(value!=null)
            {
                return value.ToString();
            }
            return null;
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            int strLimit = 3;
            try
            {
                string strVal = value.ToString();
                if(strVal.Length > strLimit)
                {
                    return strVal.Substring(0, strLimit);
                }
                else
                {
                    return strVal;
                }
            }
            catch
            {
                return "";
            }

        }
    }

然后只需在 xaml 绑定中引用转换器,如下所示:

<DataGridTextColumn Binding="{Binding Path=SellingPrice,
UpdateSourceTrigger=PropertyChanged, 
Converter={StaticResource StringLengthLimiter}}">
于 2020-03-07T11:24:33.917 回答