将一对多模型绑定到数据网格WPF

时间:2014-11-26 08:59:38

标签: c# wpf datagrid observablecollection

我有这样的模型结构:

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?

3 个答案:

答案 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设置为所选书籍的作者。

应该很简单。