问题描述
|
public class Person
{
private int _Id;
public int Id{get{return value;} set{_Id=value;}}
private string _Code
public string Code{get{return _Code;} set {_Code=value;}}
private string _Name;
public string Name{get{return _Name;}set{_Name=value;}}
}
这是我的模特班
我的窗体中有两个Combobox.Combo1和Combo2。
Combo1 DisplayMember代码值Member ID
Combo2 DisplayMember名称ValueMember ID
我想当我更改代码或命名另一个组合框编辑值并更改显示值时
解决方法
我建议进行一些更改:
首先,您可能需要将您的人员类别分为两类:代码和人员
public class Person
{
public int Id { get; set; }
public int CodeId { get; set; }
public string Name { get; set; }
}
public class Code
{
public int Id { get; set; }
public string CodeText { get; set; }
}
然后创建一个您将设置为视图的数据上下文的类,通常在MVVM设计模式中称为视图模型:
public class Data : INotifyPropertyChanged
{
public List<Person> People { get; set; }
public List<Code> Codes { get; set; }
private Code _selectedCode;
public Code SelectedCode
{
get
{
return _selectedCode;
}
set
{
_selectedCode = value;
PropertyChanged(this,new PropertyChangedEventArgs(\"SelectedCode\"));
SelectedPeople = People.Where(p => p.CodeId == SelectedCode.Id).ToList();
}
}
private List<Person> _selectedPeople;
public List<Person> SelectedPeople
{
get
{
return _selectedPeople;
}
set
{
_selectedPeople = value;
PropertyChanged(this,new PropertyChangedEventArgs(\"SelectedPeople\"));
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
请注意,它实现了INotifyPropertyChanged。这对于在Silverlight中进行绑定至关重要。在MainPage.xaml.cs的构造函数中:
Data data = new Data
{
Codes = new List<Code>(),// populate your codes
People = new List<Person>() // populate your people,giving them correct codeids
}
this.DataContext = data;
现在,您认为是XAMl:
<ComboBox Height=\"23\" HorizontalAlignment=\"Left\" Margin=\"12,12,0\" Name=\"comboBox1\" VerticalAlignment=\"Top\" Width=\"120\" ItemsSource=\"{Binding Codes}\" SelectedItem=\"{Binding SelectedCode,Mode=TwoWay}\" DisplayMemberPath=\"CodeText\" />
<ComboBox Height=\"23\" HorizontalAlignment=\"Left\" Margin=\"12,54,0\" Name=\"comboBox2\" VerticalAlignment=\"Top\" Width=\"120\" ItemsSource=\"{Binding SelectedPeople}\" DisplayMemberPath=\"Name\" />
请注意,第一个组合框绑定到DataContext上的Codes集合。 selectedItem属性TWO-WAY绑定到数据上下文上的SelectedCode属性。当用户更改所选项目时,将调用数据上下文中的设置器。我们更新了要显示的人物列表,并引发了PropertyChanged事件,该事件通知视图它需要更新人员框。
当然,如果正确实现了MVVM设计模式,这将更加清洁。我喜欢为此使用MVVM Light工具包。
我知道这很困难,但是我想引导您走上正确的道路,以便您可以在此项目中以及将来使用此知识:)