我建议进行一些更改:
首先,您可能希望将 person 类分成两个类:Code 和 Person
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,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" />
请注意,第一个组合框绑定到 DataContext 上的 Codes 集合。 selectedItem 属性TWO-WAY 绑定到数据上下文的 SelectedCode 属性。当用户更改所选项目时,将调用 datacontext 上的 setter。我们更新了要显示的人员列表,并引发了 PropertyChanged 事件,通知视图它需要更新人员框。
当然,如果你正确地实现了 MVVM 设计模式,这会更加简洁。我喜欢为此使用 MVVM Light 工具包。
我知道那是冗长的,但我想引导您走上正确的道路,以便您可以在这个项目和未来使用这些知识:)