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 时,Item 中的属性(英寸,..)与 List 中的相应索引应该以某种方式绑定到 TextBoxes。用户可以使用文本框或控制器更改项目中的数据,控制器根据用户输入的值计算剩余值。

是否有一些简单的方法可以在 WPF 中进行绑定?

我刚开始使用 WPF,所以如果问题有点模糊或非常基本,我深表歉意。我觉得有一个巧妙的解决方案,但我有点卡在这里。

我知道我可以通过 PropetyChanged 事件的可怕手工路由来解决这个问题。从文本框到窗口到​​控制器到将分配给属性的项目。和同样的方式回来。我在应用程序的 Winforms 版本中实现了这样的功能,但看起来很混乱。仍然希望有更优雅的解决方案。你能帮我吗?

4

1 回答 1

1

这就是您可以绑定TextBoxesSelectedItemof 的方式ComboBox。在这里我假设ItemsSourceComboBox的类型是List<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从它们的设置器中为其属性 Centimeters 和 Inches 实现并提高 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 回答