より詳細な例を次に示します。
生徒とクラスで例を書きました。名前と生徒の集まりがあるクラスがあります。そして、各生徒には名前があります。私のクラス:
public class Class
{
public string Name
{
get;
set;
}
public Collection<Student> Students
{
get;
set;
}
public Class( string name, Collection<Student> students )
{
this.Name = name;
this.Students = students;
}
}
public class Student
{
public string Name
{
get;
set;
}
public string FirstName
{
get;
set;
}
public string Fullname
{
get
{
return string.Format( "{0}, {1}", this.Name, this.FirstName );
}
}
public Student(string name, string firstname)
{
this.Name = name;
this.FirstName = firstname;
}
}
私のfromには2つのコンボボックスが含まれており、最初のコンボボックスにはすべてのクラスが含まれ、2番目のコンボボックスには選択したクラスに属するすべての生徒が含まれている必要があります。私はこれを(迅速で汚い)コードビハインドで解決しました。すべてのクラスのプロパティを作成し、いくつかのデータをモックしました。重要な部分は次のとおりです。
public Collection<Class> Classes
{
get;
set;
}
public MainWindow()
{
this.InitializeComponent( );
this.Classes = new Collection<Class>( )
{
new Class("Class 1",
new Collection<Student>()
{new Student("Caba", "Milagros"),
new Student("Wiltse","Julio"),
new Student("Clinard","Saundra")}),
new Class("Class 2",
new Collection<Student>()
{new Student("Cossette", "Liza"),
new Student("Linebaugh","Althea"),
new Student("Bickle","Kurt")}),
new Class("Class 3",
new Collection<Student>()
{new Student("Selden", "Allan"),
new Student("Kuo","Ericka"),
new Student("Cobbley","Tia")}),
};
this.DataContext = this;
}
次に、cmbClassという名前で最初のコンボボックスを作成します。
<ComboBox x:Name="cmbClass"
ItemsSource="{Binding Classes}"
DisplayMemberPath="Name"
Margin="10"
Grid.Row="0"/>
その後、2番目のコンボボックスを作成します。しかし、itemsSourceを取得するには、最初のボックスの値が必要です。したがって、要素バインディングを使用して、最初のボックスから値を取得します。
Binding ElementName=cmbClass
そして、このアイテムには必要なすべての学生のコレクションが含まれているため、最初のボックスのSelectedItemに興味があります(上記のクラスを参照)。だから私はこれを解決するためにpathプロパティを使用します。私の2番目のコンボボックス:
<ComboBox ItemsSource="{Binding ElementName=cmbClass, Path=SelectedItem.Students}"
DisplayMemberPath="Fullname"
Margin="10"
Grid.Row="1"/>
終了!!!
このより詳細な解決策が私のやり方を理解するのに役立つことを願っています。