通过DataTemplates和ContentControl绑定属性

时间:2012-01-24 13:35:11

标签: wpf data-binding resourcedictionary contentcontrol

我喜欢this answer几乎适合我。

但是,如果我的DataTemplate位于外部ResourceDictionary,我怎样才能实现这一目标?

我正在使用Prism,我通过使用这样的文件为每个模块提供DataTemplates(对于通用CRUD视图):

<ResourceDictionary ... some hidden ns here ... >
    <DataTemplate DataType="{x:Type model:Operation}">
        <vw:OperationView />
    </DataTemplate>
    <DataTemplate DataType="{x:Type model:Customer}">
        <vw:CustomerView />
    </DataTemplate>
</ResourceDictionary>

然后我使用this answerResourceDictionaries合并到Shell应用程序中,我有一个默认的CRUD视图,其中包含该代码:

<ContentControl Content="{Binding MyGenericObject}" />

ContentControl自动拉出正确的视图。它运行正常,但我想知道在每个视图中绑定对象的属性。

这是这些视图的一个示例(OperationView.xaml):

<UserControl x:Class="TryERP2.Cadastro.View.OperationView"
             ... some hidden NS ... >
    <StackPanel>
        <Label Content="Id" />
        <TextBox Text="{Binding ????WHAT????}" />
        <Label Content="Description" />
        <TextBox Text="{Binding ????WHAT????}" />
    </StackPanel>
</UserControl>

如何绑定这些属性?

2 个答案:

答案 0 :(得分:2)

由于DataContext后面的OperationView将是Operation类型的对象,因此您只需绑定到您想要的Operation上的任何属性

<!-- DataContext will be model:Operation per your DataTemplate -->
<UserControl x:Class="TryERP2.Cadastro.View.OperationView"
             ... some hidden NS ... >
    <StackPanel>
        <Label Content="Id" />
        <TextBox Text="{Binding Id}" />
        <Label Content="Description" />
        <TextBox Text="{Binding Description}" />
    </StackPanel>
</UserControl>

答案 1 :(得分:1)

DataContext中的UserControl是您的模型对象,因此您可以直接绑定到其属性,如下所示:

Text="{Binding SomeProperty}"

(如果只指定了一个路径,那么绑定是相对于DataContext的,请注意,在您回答的链接中,目的是在TwoWay上绑定DataContext }本身是一个原始字符串,这不能使用像{Binding .}这样的简单绑定来完成,需要指定一个以实际属性为目标的属性路径。