如何将WPF DataGridTextColumn
文本限制为最多10个字符。
我不想使用DatagridTemplateColumn
,因为它有内存泄漏问题。
该字段也绑定到数据实体模型。
答案 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"/>
,其中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}}">