具有组合框详细信息的主详细信息数据绑定[WinForms]
尝试设置一个主细节场景,其中细节将有一个组合框。是否有方法使用纯数据绑定使每个细节项保留其选择,或者是否有一些手动管道需要在此处完成 以下示例的重新创建步骤:具有组合框详细信息的主详细信息数据绑定[WinForms],winforms,data-binding,Winforms,Data Binding,尝试设置一个主细节场景,其中细节将有一个组合框。是否有方法使用纯数据绑定使每个细节项保留其选择,或者是否有一些手动管道需要在此处完成 以下示例的重新创建步骤: 将M1的详细信息更改为“详细信息2” 切换到主M2,然后返回到M1 “详细信息”返回到“详细信息1”。我希望它保留以前选择的值 表单构造函数: InitializeComponent (); List<MasterData> dataList = new List<MasterData> (); dataLis
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));
InitializeComponent();
List dataList=新列表();
添加(新主数据(“M1”);
数据列表。添加(新主数据(“M2”);
//主数据
this.masterBindingSource.DataSource=typeof(MasterData);
this.masterBindingSource.DataSource=dataList;
this.masterComboBox.DataSource=this.masterBindingSource;
this.masterComboBox.DisplayMember=“Name”;
//细节
this.detailsBindingSource.DataMember=“Details”;
this.detailsBindingSource.DataSource=this.masterBindingSource;
this.detailsComboBox.DataBindings.Add(新System.Windows.Forms.Binding(“SelectedValue”),this.masterBindingSource,
“选定细节”,正确);
this.detailsComboBox.DataSource=this.detailsBindingSource;
this.detailsComboBox.DisplayMember=“Name”;
//标签,以确保主控形状实际上正在更改
this.detailLabel.DataBindings.Add(新的System.Windows.Forms.Binding(“Text”),this.masterBindingSource,
“Name”,true,DataSourceUpdateMode.OnPropertyChanged);
数据:
公共类详细信息
{
公共字符串名称{get;set;}
公共详细信息(字符串名称)
{
this.Name=Name;
}
}
公共类主数据
{
公共字符串名称{get;set;}
公共列表详细信息{get;set;}
公共详细信息已选择详细信息{get;set;}
公共主数据(字符串名称)
{
this.Details=newlist();
this.Name=Name;
this.Details.Add(新细节(“Detail1”);
this.Details.Add(新细节(“细节2”));
this.SelectedDetail=this.Details.FirstOrDefault();
}
}
我来自WPF背景,正在努力理解WinForms中的绑定,希望这一切都有意义。您的解释有点混乱。你能从控件的角度解释一下吗?@jcwrets这就是winforms的问题所在,在WPF中,用户界面是通过对它的抽象(视图模型)和数据绑定来实现的,没有“控件”就无法真正设计用户界面。winforms的数据绑定是一个荒谬的笑话,不允许任何这种情况发生。@kbeal2k为什么要倒退?winforms是一项没有人关心的非常古老的技术。如果您已经了解WPF,为什么不使用它呢?Winforms在其可能的绑定上有自己的位置,它只是没有WPF那么健壮。我一直使用WinForms,并且能够使用MVVM,但我使用RX框架和绑定。
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 ();
}
}