0

尝试设置一个主细节场景,其中细节将有一个组合框。有没有办法使用纯数据绑定使每个细节项保留其选择,或者是否需要在此处完成一些手动管道。

以下示例的娱乐步骤:

  1. 将 M1 的详细信息更改为“Detail2”
  2. 切换到主 M2 再回到 M1
  3. 详细信息返回到 Detail1。我希望它保留以前选择的值

表单构造函数:

InitializeComponent ();

List<MasterData> dataList = new List<MasterData> ();

dataList.Add (new MasterData ("M1"));
dataList.Add (new MasterData ("M2"));

// master data
this.masterBindingSource.DataSource = typeof (MasterData);
this.masterBindingSource.DataSource = dataList;

this.masterComboBox.DataSource = this.masterBindingSource;
this.masterComboBox.DisplayMember = "Name";

// details                    
this.detailsBindingSource.DataMember = "Details";
this.detailsBindingSource.DataSource = this.masterBindingSource;

this.detailsComboBox.DataBindings.Add (new System.Windows.Forms.Binding ("SelectedValue", this.masterBindingSource,
    "SelectedDetail", true));

this.detailsComboBox.DataSource = this.detailsBindingSource;
this.detailsComboBox.DisplayMember = "Name";

// Label to make sure the master is actually changing
this.detailLabel.DataBindings.Add (new System.Windows.Forms.Binding ("Text", this.masterBindingSource, 
    "Name", true, DataSourceUpdateMode.OnPropertyChanged));

数据:

public class Details
{
    public String Name { get; set; }

    public Details (string name)
    {
        this.Name = name;
    }
}

public class MasterData
{
    public String Name { get; set; }
    public List<Details> Details { get; set; }
    public Details SelectedDetail { get; set; }

    public MasterData (string name)
    {
        this.Details = new List<Details> ();
        this.Name = name;

        this.Details.Add (new Details ("Detail1"));
        this.Details.Add (new Details ("Detail2"));
        this.SelectedDetail = this.Details.FirstOrDefault ();
    }
}

我来自 WPF 背景,努力理解 WinForms 中的绑定,希望这一切都有意义。

4

0 回答 0