C# Silverlight将绑定添加到控件
这是我的模型课 我的表格中有一个两个Combobox.Combo1和Combo2。 Combo1显示成员代码值成员IdC# Silverlight将绑定添加到控件,c#,silverlight,C#,Silverlight,这是我的模型课 我的表格中有一个两个Combobox.Combo1和Combo2。 Combo1显示成员代码值成员Id Combo2 DisplayMember Name ValueMember Id 我希望在更改代码或命名另一个组合框编辑值和显示值更改时,我建议进行以下几项更改: 首先,您可能希望将person类分为两个类:Code和person public class Person { private int _Id; public int Id{get{ret
Combo2 DisplayMember Name ValueMember Id
我希望在更改代码或命名另一个组合框编辑值和显示值更改时,我建议进行以下几项更改: 首先,您可能希望将person类分为两个类:Code和person
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;}}
}
然后创建一个类,将其设置为视图的datacontext,在MVVM设计模式中通常称为viewmodel:
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; }
}
公共类数据:INotifyPropertyChanged
{
公共列表人员{get;set;}
公共列表代码{get;set;}
专用代码_selectedCode;
公共代码SelectedCode
{
收到
{
返回所选代码;
}
设置
{
_selectedCode=值;
PropertyChanged(这是新的PropertyChangedEventArgs(“SelectedCode”);
SelectedPeople=People.Where(p=>p.CodeId==SelectedCode.Id).ToList();
}
}
私人名单(u选择的人);;
公开选定人员列表
{
收到
{
返回所选人员;
}
设置
{
_选择的人=价值;
PropertyChanged(这是新PropertyChangedEventArgs(“SelectedPeople”);
}
}
公共事件属性更改事件处理程序属性更改;
}
请注意,它实现了INotifyPropertyChanged。这对于Silverlight中的绑定至关重要。在MainPage.xaml.cs的构造函数中:
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;
}
数据数据=新数据
{
代码=新列表<代码>(),//填充代码
People=new List()//填充您的人员,为他们提供正确的代码ID
}
this.DataContext=数据;
现在在视图的XAMl中:
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;
注意,第一个组合框绑定到DataContext上的Codes集合。selectedItem属性双向绑定到datacontext上的SelectedCode属性。当用户更改所选项目时,将调用datacontext上的setter。我们更新了要显示的人物列表,并引发PropertyChanged事件,该事件通知视图需要更新人物框
当然,如果您正确地实现了MVVM设计模式,这将更加清晰。为此,我喜欢使用MVVM Light工具包
我知道那是长篇大论,但是我想引导您走上一条正确的道路,这样您就可以在这个项目和将来使用这些知识:)谢谢您的回答,但是如果我想在我将项目源添加到combobox时,从DAtaContext Adonet实体数据模型中创建此项,那么我将为数据绑定提供什么呢?我强烈建议您对MVVM设计进行一些研究图案实际上,您有一个视图模型,可以将视图(XAML)绑定到该模型。在此视图模型中,您将拥有UI元素将绑定到的集合。在viewmodel中,您将使用实体框架中的任何内容填充这些集合。查看它,它将使您的编码更简洁、更容易:
<ComboBox Height="23" HorizontalAlignment="Left" Margin="12,12,0,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,0" Name="comboBox2" VerticalAlignment="Top" Width="120" ItemsSource="{Binding SelectedPeople}" DisplayMemberPath="Name" />