2017-11-17 5 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 그것 잘못, 내가 그것을 편집 할 것입니다, 나는 codebehind에서 그것을 설정하고 싶지 않아, 그것은'바인딩을 통해 설정됩니다, 나는 그것을 제한하고 싶습니다. – 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; 
     } 
    } 
[뒤에 코드에서 텍스트 상자에 대한 최대 길이 속성?]의
0

나는 당신을 올바르게 이해하기를 바랍니다. ViewModel에서 텍스트의 처음 5 자만 반환하고 해당 속성에 바인딩을 설정하는 새 Property를 만들 수 있습니다. 텍스트가 변경되면 새 Property에 대해 PropertyChanged를 호출해야 할 수도 있습니다.

0

간단하지만 매우 유연한 방법은 원래 속성의 처음 5자를 반환 한 다음이 속성에 컨트롤을 바인딩하는 ViewModel의 투영 된 속성을 도입하는 것입니다. 속성 값의 일부만 보여주기 때문에 TextBox에서이 속성에 쓰지 않으려한다고 가정합니다. 따라서 투영 된 속성을 읽기 전용으로 설정하십시오.