在另一个DataGrid中绑定DataGrid所选的行

3

我有一个类 Book:

class Book
{
 public int Id {get; set;}
 public string Title {get; set;}
 public string Authors {get; set;}
 public string Genre {get; set;}
 public virtual ICollection <Publication> Publications {get; set;}
}

在表单中有两个数据网格(命名为AB):A 显示了一个 Book 对象列表,B 显示所选书籍的 Publications 元素(即绑定到A中选择的行) 。
问题是如何将BA的当前行绑定?
我这样做,但我认为这并不完全正确:
<DataGrid x:Name="BooksGrid"
          ItemsSource="{Binding Path=WorkingBooksSet, Mode=TwoWay}"
          IsSynchronizedWithCurrentItem="True" RowDetailsVisibilityMode="VisibleWhenSelected"
          AutoGenerateColumns="False">
  <DataGrid.Columns>
    <DataGridTextColumn Binding="{Binding Path=Id}" Width="Auto" />
    <DataGridTextColumn Binding="{Binding Path=Title}" Width="*" />
    <DataGridTextColumn Binding="{Binding Path=Authors}" Width="*" />
    <DataGridTextColumn Binding="{Binding Path=Genre}" Width="*" />
  </DataGrid.Columns>


  <DataGrid.RowDetailsTemplate>
    <DataTemplate>
      // Second DataGrid
      <DataGrid ItemsSource="{Binding ElementName=BooksGrid, Path=SelectedItem.Publications}"
                AutoGenerateColumns="False">
        <DataGrid.Columns>
          <DataGridTextColumn Binding="{Binding Path=Publisher}" />
          <DataGridTextColumn Binding="{Binding Path=ISBN}" />
          ...
        </DataGrid.Columns>
      </DataGrid>

    </DataTemplate>
  </DataGrid.RowDetailsTemplate>
</DataGrid>

WorkingBooksSet 是我 ViewModel 中的 ObservableCollection


所以我在 这份绑定小抄中 找到了解决方法。

1个回答

1
我建议在您的ViewModel中设置一个SelectedBook属性,并将DataGrid A的选定项绑定到它。
SelectedItem = "{Binding SelectedBook}"

然后,将DataGrid B的ItemsSource设置为publications属性。
ItemsSource="{Binding SelectedBook, Path=Publications}"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接