2009-08-05 8 views
0

WPFでのデータバインディング時に "使用できない"値を表示する典型的なパターンは何ですか?WPFでのデータバインディング時の "unavailable"値のパターン

たとえば、MVVMを使用しています。私のビュー内のTextBlockはビューモデルのプロパティにバインドされています。その一部はintです。プロパティ値ではなく、ビューに2つのダッシュ( " - ")を一時的に表示したいときがあります。

プロパティを文字列に変更し、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(); } 
} 

これはあなたの両方の長所を与える:私の提案は2つのプロパティint値が含まれている1と表示値が含まれているものを持っているだろう。お使いのVMロジックはintプロパティで動作しますが、TextBlockは、stringという基になるintの表現に直接バインドされます。

+0

'SomeValueDisplay'は、文字列でなければなりません。 –

+0

あなたの答えをありがとう。私の場合、実際には2番目のプロパティは必要ありません。プロパティを直接文字列に変更できます。 –

+0

@トーマス:ありがとう - 編集。 –

0

TextBlockはすでにテキストを表示するので、理由だけではなく、たとえば、の場合は"--"を返す結合にVM上のいくつかbool値をカスタムIMultiValueConverterを追加しますか?

0

WPFは、テキストブロックに値を表示するために、舞台裏でコンバーター(intから文字列など)を使用しています。機能を変更したい場合は、シンプルなカスタムコンバータを用意して、思うような特別なケースを処理できます。

0

プロパティにnull可能なintを使用でき、バインディングではTargetNullValue = - を指定できます。

とにかく元の値が必要な場合は、実際のint値をバッキングストアとして使用し、値またはnullを返すかどうかを判断するロジックを使用できます。

関連する問題