我喜欢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 answer将ResourceDictionaries
合并到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>
如何绑定这些属性?
答案 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 .}
这样的简单绑定来完成,需要指定一个以实际属性为目标的属性路径。