绑定到父控件的CollectionViewSource

时间:2013-03-05 02:58:24

标签: c# wpf data-binding user-controls collectionviewsource

我有一个由父用户控件(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名称。你知道我怎么能轻易访问它吗?

谢谢!

1 个答案:

答案 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}">