我有这样的模型结构:
public class Book
{
public List<Author> Authors { get; set; }
public Book()
{
Authors = new List<Authors>();
}
}
public class Author
{
public string Name { get; set; }
}
我想以某种方式显示WPF中2个数据网格中的书籍列表 - 一个带有书籍的数据网格,当我在那里选择一行时 - 在第二个数据网格中出现所选书籍的作者列表。
我该如何实现?可能我应该使用ObservableCollection,但是如何将List绑定到ObservableCollection?
答案 0 :(得分:3)
您应该拥有一个ViewModel,它具有Books属性和SelectedBook属性的集合。
public class ViewModel
{
public List<Book> Books { get; set; }
public Book SelectedBook { get; set; }
}
XAML如下所示,
<DataGrid ItemsSource="{Binding Books}"
SelectedItem="{Binding SelectedBook, Mode=TwoWay}"/>
<DataGrid ItemsSource="{Binding SelectedBook.Authors}"/>
答案 1 :(得分:2)
除了XAML Lover的回答。如果您不想在Viewmodel中使用SelectedBook并在视图中执行此操作,则可以使用以下绑定
<DataGrid x:Name="books" ItemsSource="{Binding Books}"/>
<DataGrid ItemsSource="{Binding ElementName=books,Path=SelectedItem.Authors}"/>
答案 2 :(得分:0)
好的 - 从我对你的问题的理解 - 你有两个并排的网格(Say BooksGrid和AuthorsGrid)
点击BookGrid中的一行应该导致该书的作者在AuthorsGrid上显示。
如果您使用MVVM - @XAML Lover的回复应该有效。如果没有使用MVVM - 在后面的代码中处理DataGrid.Selected事件,从选定的行 - 获取您的book元素和 将AuthorsGrid.ItemSource设置为所选书籍的作者。
应该很简单。