Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将WPF DataGridTextColum文本的最大长度限制为10个字符_C#_Wpf_C# 4.0_Wpfdatagrid - Fatal编程技术网

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

C# 如何将WPF DataGridTextColum文本的最大长度限制为10个字符,c#,wpf,c#-4.0,wpfdatagrid,C#,Wpf,C# 4.0,Wpfdatagrid,如何将WPFDataGridTextColumnText的最大长度限制为10个字符 我不想使用DatagridTemplateColumn,因为它有内存泄漏问题 此外,该字段还绑定到数据实体模型。如果您不想使用DatagridTemplateColumn,则可以在此处更改并设置TextBox.MaxLength: <DataGridTextColumn Binding="{Binding Path=SellingPrice, UpdateSourceTrigger=PropertyChan

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

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


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

如果您不想使用
DatagridTemplateColumn
,则可以在此处更改并设置
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>

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

以下转换器执行此任务。只需在
Application.Resources
下添加对
App.xaml
的以下引用:
,其中
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}}">


您的已接受解决方案有什么问题?您在说什么内存泄漏?字段的值未保存在实体数据模型中。从网格到上下文绑定没有发生。。。我还了解到DatagridtemplateColumn存在一些内存泄漏问题。。。!!!如何在3位之后使用文本块而不按额外数字?