使用Binding更新时,限制TextBox的字符串长度

时间:2017-11-17 10:01:12

标签: c# wpf textbox

我知道您可以通过设置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);
        }
    }

3 个答案:

答案 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写入此属性。因此,您也可以将预测属性设置为只读。