2009-08-05 3 views
0

WPF에서 데이터 바인딩 할 때 "사용할 수없는"값을 표시하는 일반적인 패턴은 무엇입니까?WPF에서 데이터 바인딩 할 때 "사용할 수없는"값의 패턴

예를 들어 MVVM을 사용하고 있는데 내보기의 TextBlock은 내 viewmodel의 속성에 바인딩됩니다. 그 중 일부는 int입니다. 속성 값보다는 내보기에 두 개의 대시 ("-")를 임시로 표시하고 싶을 때가 있습니다.

속성을 문자열로 변경 한 다음 getter에서 일부 논리를 추가하여 값을 반환할지 "-"를 반환할지 지정할 수 있습니다. 이것은 아마도 MVVM을 사용하는 적절한 방법 일 수 있지만 더 쉬운 방법이 있습니까?

TextBlockFallbackValue을 활용할 수있는 방법이 있습니까? 또는 일시적으로 데이터 바인딩을 일시 중단하고 "사용할 수없는"값을 표시하는 다른 방법이 있습니까?

답변

3

FallbackValue은 바인딩 경로를 확인할 수 없거나 변환기가 DependencyProperty.UnsetValue을 반환 할 때만 사용됩니다. MVVM을 수행 할 때 변환기는 일반적으로 회피됩니다.

public int SomeValue 
{ 
    get { return _someValue; } 
    set 
    { 
     if (_someValue != value) 
     { 
      _someValue = value; 
      OnPropertyChanged("SomeValue"); 
      OnPropertyChanged("SomeValueDisplay"); 
     } 
    } 
} 

public string SomeValueDisplay 
{ 
    get { return _someValue == -1 ? "--" : _someValue.ToString(); } 
} 

이 당신에게 두 세계의 최고를 제공합니다 : 내 제안은 두 가지 속성의 int 값을 포함하는 하나의 디스플레이 값을 포함 하나를 가지고하는 것입니다. VM 로직은 int 속성과 함께 작동하지만 TextBlockstring 표현을 직접적으로 int으로 바인딩합니다.

+0

'SomeValueDisplay'는 int가 아닌 문자열이어야합니다. –

+0

답장을 보내 주셔서 감사합니다. 내 경우에는 실제로 두 번째 속성이 필요하지 않습니다. 문자열을 직접 속성으로 변경할 수 있습니다. –

+0

@ 토마스 : 감사합니다 - 편집 됨. –

0

TextBlock 이미 텍스트를 표시하기 때문에, 왜 그냥, 말의 경우 "--"를 반환하는 바인딩에 VM에 대한 몇 가지 bool 값을 사용자 정의 IMultiValueConverter을 추가?

0

WPF는 텍스트 블록에 값을 표시하기 위해 장면 뒤에서 변환기 (int와 같은)를 이미 사용합니다. 기능을 변경하려면 간단한 사용자 지정 변환기를 제공하여 생각할 수있는 특별한 경우를 처리 할 수 ​​있습니다.

0

속성에 nullable int를 사용할 수 있으며 바인딩에서 TargetNullValue = -를 지정합니다.

어쨌든 원래 값이 필요하면 실제 int 값을 백업 저장소로 사용하고 값 또는 null 반환 여부를 결정하는 논리를 사용할 수 있습니다.

관련 문제