我知道您可以通过设置TextBox
属性来限制MaxLength
的输入字符。
使用Text
更新Text
时是否有类似方法限制Binding
中显示的字符数?例如,当它从Binding
更新时,只显示前5个字符并保留其余字符?
更新: 感谢所有的信息,我从你的建议中获得灵感,最后用转换器做到了。如果有人想在以后使用它,我就是这样做的。
public class StringLimiter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
string val = value.ToString();
if (val.Length < 5)
return val;
else
return val.Substring(0, 5);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
string val = value.ToString();
if (val.Length < 5)
return val;
else
return val.Substring(0, 5);
}
}
答案 0 :(得分:1)
这应该有效:
<强>的Xaml:强>
<TextBox Text="{Binding TextToDisplay}" />
<强>代码:强>
private const int maxLength = 5;
private string _textToDisplay = "Hello SO";
public string TextToDisplay
{
get
{
if(_textToDisplay.Length > maxLength)
{
return _textToDisplay.Substring(0, maxLength);
}
return _textToDisplay;
}
set
{
_textToDisplay = value;
RaiseProperyChanged();
}
}
答案 1 :(得分:0)
我希望你理解正确。您可以在ViewModel中创建一个新属性,该属性仅返回文本的前5个字符,并将绑定设置为该属性。 当文本发生变化时,您可能需要为新属性调用PropertyChanged。
答案 2 :(得分:0)
一种简单但非常灵活的方法是在Viewmodel中引入一个投影属性,该属性返回原始属性的前5个字符,然后将控件绑定到此属性。由于您只显示属性值的一部分,我假设您不希望从该TextBox写入此属性。因此,您也可以将预测属性设置为只读。