C# Silverlight将绑定添加到控件

C# 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

这是我的模型课

我的表格中有一个两个Combobox.Combo1和Combo2。 Combo1显示成员代码值成员Id
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" />