1

プロジェクトの構造 (疑似コード):

Backend:

Controler // controler class
  List<Item> ItemsList
    Item // Model/Data 'struct' kind of class
      decimal Centimeters
      decimal Inches

  int ItemIndex // index of item in ComboBox selected for work

UI:

MainWindow
  // TextBoxes
  Centimeters
  Inches

  ComboBox ItemIndex

機能: ComboBox で ItemIndex を選択すると、List 内のそれぞれのインデックスを持つ Item 内のプロパティ (インチ、..) は、どういうわけか TextBoxes に双方向でバインドする必要があります。アイテム内のデータは、TextBoxes を使用してユーザーが変更するか、ユーザーが入力した値に基づいて残りの値を計算するコントローラーによって変更できます。

WPF でバインディングを行う簡単な方法はありますか?

私はWPFを使い始めたばかりなので、問題が漠然としていたり​​、非常に基本的なものであったりした場合は申し訳ありません. 巧妙な解決策があると感じていますが、ここで少し行き詰まりました。

これは、PropetyChanged イベントの恐ろしい手作りのルーティングで解決できることを知っています。Textbox から Window、Controller、そして Property に割り当てられる Item へ。そして帰りも同じ。アプリのWinformsバージョンでこのように実装しましたが、かなり混乱しているように見えます. よりエレガントなソリューションを期待しています。手伝ってくれますか?

4

1 に答える 1

1

これがof にバインドTextBoxesする方法です。ここで、あなたのがタイプであると仮定していますSelectedItemComboBoxItemsSourceComboBoxList<Item>

    <TextBox x:Name="Inches" Text="{Binding SelectedItem.Inches, ElementName=MyCombo}"/>
    <TextBox x:Name="Centis" Text="{Binding SelectedItem.Centimeters, ElementName=MyCombo}"/>
    <ComboBox x:Name="MyCombo"/>

ただし、この場合、ItemクラスはINotifyPropertyChanged、以下のようにセッターからプロパティ センチメートルとインチの PropertyChanged を実装して発生させる必要があります。

public class Item : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
        private void NotifyPropertyChanged(string name)
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(name));
        }

        decimal centimeters;
        decimal inches;

        public decimal Centimeters
        {
            get { return centimeters; }
            set
            {
                centimeters = value;
                NotifyPropertyChanged("Centimeters");
            }
        }

        public decimal Inches
        {
            get { return inches; }
            set
            {
                inches = value;
                NotifyPropertyChanged("Inches");
            }
        }

    }
于 2013-10-20T19:10:24.213 に答える