我有一个由父用户控件(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的文本框字段中显示当前选定的counterpaty名称。你知道我怎么能轻易访问它吗?
谢谢!
答案 0 :(得分:0)
您应该可以将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}">