如何在CollectionViewSource WPF中动态创建绑定?

时间:2015-03-26 15:10:46

标签: c# wpf xaml

在数据库中,我有3个连续表患者(1)< - (n)研究(1)< - (n)卡。

我的结构如下:

// app.xaml
<Application.Resources>
    <AppName:appnameDataSetApp x:Key="appnameDataSetApp"/>
</Application.Resources>

// main.xaml
<Window.Resources>
    <CollectionViewSource x:Key="patientVS"
        Source="{Binding patient, Source={StaticResource appnameDataSetApp}}"/>
    <CollectionViewSource x:Key="studyVS"
        Source="{Binding FK_study_patient, Source={StaticResource patientVS}}"/>
    <CollectionViewSource x:Key="cardVS"
        Source="{Binding FK_card_study, Source={StaticResource studyVS}}"/>
</Window.Resources>

当我从Visual Studio中的“数据源”窗口拖放字段时创建它。

现在我想创建一个新的用户控件(或窗口),其中包含从main连接到patientVS的CollectionViewSource。 在那个CollectionViewSource中,我将选择特定的研究,用户控制中的其他组件将使用它。

我想它一定是这样的:

// study.xaml
<Window.Resources>
    <CollectionViewSource x:Key="studyVS_ano" 
        Source="{Binding FK_study_patient, Source={StaticResource
            ?HOW_FROM_PARENT_patientVS?}}"/>
    <CollectionViewSource x:Key="cardVS_ano"
        Source="{Binding FK_card_study, Source={StaticResource studyVS_ano}}"/>
</Window.Resources>
...
<ComboBox x:Name="cbxStudy" ItemsSource="{Binding Source={StaticResource studyVS_ano}}" 
<ComboBox x:Name="cbxCard" ItemsSource="{Binding Source={StaticResource cardVS_ano}}" 

但我不知道如何创建与父窗口的连接。

我试试这个:

// study.xaml
<Window.Resources>
    <CollectionViewSource x:Key="studyVS_ano"/>
    <CollectionViewSource x:Key="cardVS_ano"
        Source="{Binding FK_card_study, Source={StaticResource studyVS_ano}}"/>
 </Window.Resources>
...

和初始化方法:

public void Initialize()
{
    CollectionViewSource patientVS = (CollectionViewSource)parent.FindResource("patientVS");
    CollectionViewSource studyVS_ano = (CollectionViewSource)FindResource("studyVS_ano");

    // not working
    studyVS_ano.Source = patientVS;
    // not working
    studyVS_ano.Source = patientVS.View;
    // not working (I know it does not make sense) 
    studyVS_ano.Source = "{Binding FK_study_patient, Source={StaticResource patientVS}}"
}

但是当我使用Source形式父学习VS:

public void Initialize()
{
    CollectionViewSource studyVS = (CollectionViewSource)parent.FindResource("studyVS");
    CollectionViewSource studyVS_ano = (CollectionViewSource)FindResource("studyVS_ano");

    // working !
    studyVS_ano.Source = studyVS.Source;
}

这有效但不完全,因为当我在patientVS视图中更改当前患者时,studyVS会正确更改,但studyVS_ano不会更改。

我想创建多个 study.xaml 控件。

如何创建绑定或连接两个CollectionViewSource对象的东西?

0 个答案:

没有答案