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

10

如何将 WPF 的 DataGridTextColumn 的文本长度限制为最大10个字符?

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

另外,该字段绑定到一个数据实体模型。


1
你的原始问题中被接受的解决方案有什么问题?你所说的“内存泄漏”是指什么? - dkozl
字段的值未能保存在实体数据模型中。因为网格到上下文的绑定没有发生...我还读到DatagridtemplateColumn有一些内存泄漏问题...!!! - neo
2个回答

18

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

如何使用TextBlock - Ghotekar Rahul

1
我知道我有些迟钝,但这里有一个解决方案,我在其他地方都找不到。它涉及使用值转换器。有点欺骗性,但它的优点是它不会用许多行污染xaml,这可能很有用,如果你想将其应用于许多列。
以下转换器可以完成工作。只需在下的App.xaml中添加以下引用:<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}}">

在输入三位数后,请不要再按额外的数字。 - Ghotekar Rahul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接