绑定另一个数据网格中的选定行

本文关键字:网格 另一个 数据 数据网 绑定 | 更新日期: 2023-09-27 18:33:33

我有一个类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)DataGrids:A显示Book对象的列表,B显示所选书籍Publications中的元素(即绑定到A中的选定行)。

问题是如何将B绑定到A中的当前行?

我这样做,但在我看来这不太正确:

<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在我的视图模型中ObservableCollection


所以我在这个绑定备忘单中找到了一个解决方案。

绑定另一个数据网格中的选定行

我建议在你的ViewModel中有一个SelectedBook属性,并将DataGrid A的选定项绑定到它。

SelectedItem = "{Binding SelectedBook}"

然后,将 DataGrid B 的 ItemsSource 设置为发布属性。

ItemsSource="{Binding SelectedBook, Path=Publications}"