2

いくつかのプロパティを持つオブジェクトがあり、そのうちの 1 つがCarpetColor. また、独自のコンテナー内のフォームに3 つのラジオ ボタン ( rbRedrbBlue、 ) があります。データバインディングを使用して、チェックされているボタンrbGreenにオブジェクトを設定したいと考えています。CarpetColor

1 つのコントロールのプロパティをオブジェクト プロパティにバインドする単純なバインドの方法を知っています。私が理解できないのは、3 つのコントロールの結果を 1 つのプロパティにバインドする方法です。例として、ユーザーが「赤」をクリックすると、値はCarpetColor「赤」になります。同様に、彼が「緑」を選択した場合、 の値はCarpetColor「緑」に変わるはずです。

4

1 に答える 1

3

次のように、CarpetColor というフォームにプロパティを作成します。

enum Color { Red, Blue, Green } 
public Color CarpetColor
{ 
get { return rbGreen.Checked ? Green : (rbRed.Checked ? Red : Blue); }
set 
  {  
    if (value == Green)
        rbGreen.Checked = true;
    else
        if (value == Red)
           rbRed.Checked = true;
        else
           rbBlue.Checked = true;
   }
}

次に、フォームの CarpetColor プロパティをデータ ソースの CarpetColor にバインドするだけです。

フォームにINotifyPropertyChanged インターフェイスを実装させ、 ラジオ ボタン イベントを使用してPropertyChangedイベントを発生させます。

protected void OnPropertyChanged(string propertyName)
{
    if (PropertyChanged != null)
    {
         PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
}

rbGreen.CheckedChanged += (s, args) => OnPropertyChanged("CarpetColor");
rbRed.CheckedChanged += (s, args) => OnPropertyChanged("CarpetColor");
rbBlue.CheckedChanged += (s, args) => OnPropertyChanged("CarpetColor");
于 2012-07-10T13:07:13.547 に答える