2011-07-26 1 views
0

私は2つのテキストボックスと1つのチェックボックス(および他の同様のケース)を使用します。チェックボックスがチェックされていない限り、テキストボックスにあるものと等しくなるようにするには、それぞれ0とInt.maxにする必要があります。C#、XAML、WPF:テキストボックスとチェックボックスを含む複雑なバインディングを行う最良の方法

WPFバインディングでこれを行うにはどのような方法が最適ですか?私は何とかマルチバインディングを使用しなければならないと思いますか?もう1つの可能性は、それが可能な場合(?)の値を連鎖させることです。つまり、checkbox.IsCheckedは、基礎となるデータオブジェクトにバインドするカスタムコンバータを介してtextBox.Textにバインドします。

どうすればよいですか?複数のものが何らかの形で他のものに何らかの形で影響を及ぼし、チェーン化が可能な限りどこでも理にかなっている場合、マルチバインディングは意味があると私は思います。私は上記と同様の1つのケースを持っていますが、スライダーも含まれています。

答えて

0

MVVMアプローチを使用します。ビューモデルレイヤーでは、目的に応じてUIを動作させるロジックを自由に設定できます。シンプルで、速く、信頼できる。

1

最も簡単な方法はMVVMアプローチを使用することです。あなたが必要なロジックを実装ViewModelにビルドします。MinMaxにあなたのテキストボックスのバインド

public class MyViewModel : ViewModelBase 
{ 
    private int _min; 
    public int Min 
    { 
     get { return _min; } 
     set 
     { 
      _min = value; 
      OnPropertyChanged("Min"); 
      OnPropertyChanged("ActualMin"); 
     } 
    } 

    private int _max; 
    public int Max 
    { 
     get { return _max; } 
     set 
     { 
      _max = value; 
      OnPropertyChanged("Max"); 
      OnPropertyChanged("ActualMax"); 
     } 
    } 

    private bool _useMinMax; 
    public bool UseMinMax 
    { 
     get { return _useMinMax; } 
     set 
     { 
      _useMinMax = value; 
      OnPropertyChanged("UseMinMax"); 
      OnPropertyChanged("ActualMin"); 
      OnPropertyChanged("ActualMax"); 
     } 
    } 

    public int ActualMin 
    { 
     get { return _useMinMax ? _min : 0; } 
    } 

    public int ActualMax 
    { 
     get { return _useMinMax ? _max : int.MaxValue; } 
    } 

} 

を、そしてCheckBoxUseMinMaxに特異的に結合します。次に、使用する実際の値を取得するには、ActualMinActualMaxを使用します。

+0

あなたの最小値と最大値も右、これは、VMのクラスであるために仮定されActualMinとActualMax – Ray

+0

ためOnPropertyChangedを調達する必要がありますか?モデルには何が起こったのですか? _min、_maxなどはMVVMに基づいてモデル内にあるべきではありませんか? –

+0

@レイ、ありがとう、それは今修正されました –

関連する問題