绑定到父控件的CollectionViewSource
本文关键字:CollectionViewSource 控件 绑定 | 更新日期: 2023-09-27 18:02:07
我有一个由父用户控件(Counterparties_MainWindow)与嵌入的用户控件(Counterparties_UserInputs和Counterparties_SystemDetails)组成的复合视图:
<UserControl x:Class="Counterparties_MainWindow">
<av:UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Counterparties_Dictionary.xaml" />
</ResourceDictionary.MergedDictionaries>
<CollectionViewSource x:Key="counterpartiesDataView" Source="{Binding Path=CounterpartiesData}" />
</ResourceDictionary>
</av:UserControl.Resources>
<DockPanel>
<DockPanel>
<GUI:Counterparties_UserInputs x:Name="UserInputs"/>
<GUI:Counterparties_SystemDetails x:Name="SystDetails"/>
</DockPanel>
</DockPanel>
"Counterparties_SystemDetails"包含一个网格,该网格显示了一些已经从CounterpartiesData(对象列表)中定义的字段。"Counterparties_UserInputs"显示了CounterpartiesData中尚未定义的字段列表,这些字段应该由用户定义。
我曾经在Counterparties_SystemDetails用户控件xaml中拥有CollectionViewSource,并直接将网格绑定到它,它正在工作(即显示我的CounterpartiesData详细信息):
<DataGrid Name="CounterpartiesGrid" ItemsSource="{Binding Source={StaticResource counterpartiesDataView}}"
SelectedItem="{Binding Path=SelectedCounterparty, Mode=OneWayToSource}" Style="{StaticResource DataGridStyle}">
然而,现在我已经将CollectionViewSource移动到父窗口,以便在两个子控件中共享相同的CounterpartiesData对象,我找不到任何方法将其绑定回我的网格。你能告诉我怎么做吗?
最后但并非最不重要的是,我想在用户控件Counterparties_UserInputs的文本框字段中显示当前选择的交易对手名称。你知道我怎么方便地访问它吗?
谢谢!
您应该能够将counterpartiesDataView
作为DataContext
传递给UserControl
<DockPanel>
<DockPanel>
<GUI:Counterparties_UserInputs x:Name="UserInputs" DataContext="{Binding Source={StaticResource counterpartiesDataView}}" />
并设置你的UserControl的ItemSource
<DataGrid Name="CounterpartiesGrid" ItemsSource="{Binding}" />
然而,如果你的UserControl
已经使用它的DataContext
为其他的东西,你可以使用FindAncestor
找到父和绑定到它的属性之一。
<DataGrid Name="CounterpartiesGrid" ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type UserControl}},Path=CounterpartiesData}">