如何将WPF DataGridTextColum Text最大长度限制为10个字符

时间:2013-09-26 13:08:31

标签: c# wpf c#-4.0 wpfdatagrid

如何将WPF DataGridTextColumn文本限制为最多10个字符。

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

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

2 个答案:

答案 0 :(得分:12)

如果您不想使用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>

答案 1 :(得分:1)

我知道我在做些事情,但是我想出了另一种解决方案,在其他任何地方都找不到。它涉及使用值转换器。有点hacky,是的,但是它的优点是它不会污染很多行的xaml,如果要将其应用于许多列,这可能很有用。

以下转换器完成该工作。只需将以下引用添加到App.xaml下的Application.Resources<con:StringLengthLimiter x:Key="StringLengthLimiter"/>,其中conApp.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}}">