2017-11-17 19 views
0

MaxLengthプロパティを設定することにより、TextBoxの入力文字をユーザーから制限できます。TextBoxがBindingで更新されたときにTextBoxの文字列の長さを制限します

TextBindingに更新されたときに、Textに表示される文字数を制限する同様の方法はありますか?たとえば、それが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

可能な複製(HTTPS:/ /stackoverflow.com/questions/4316462/maxlength-property-for-textbox-in-code-behind) – Jack

+0

多分私はpそれは間違っている、私はそれを編集する、私はコードビハインドからそれを設定したくない、それは 'Binding'を介して設定されている、私はそれを制限したい。 – VegaBrothers

+0

MVVMに従っていますね。 – Jack

答えて

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; 
     } 
    } 
[背後にあるコードでテキストボックスのためのMaxLengthプロパティ?]の
0

私はあなたが正しいことを理解しています。 ViewModelに新しいPropertyを作成して、テキストの最初の5文字だけを返し、そのプロパティにバインディングを設定することができます。 テキストが変更されたときに新しいPropertyに対してPropertyChangedを呼び出す必要がある場合があります。

0

シンプルで非常に柔軟な方法は、元のプロパティの最初の5文字を​​返し、コントロールをこのプロパティにバインドする投影されたプロパティをViewmodelに導入することです。プロパティ値の一部しか表示していないので、TextBoxからこのプロパティに書き込む必要はないと仮定します。ですから、投影されたプロパティも読み取り専用にしてください。

関連する問題