我有一个项目,我希望在其中显示不同类型的项目集合 - 在我的初始案例bool
,string
和StringList
中,它实际上只是{{} 1}}。
我想要做的是将每个项目渲染为可以编辑该项目的适当控件 - 例如,CheckBox,TextBox,DataGrid。
我可以通过添加DataType键控的DataTemplate资源来完成所有这些工作。但是,此处的问题变得能够有选择地重用这些模板,而无需在项目范围内应用它们。毕竟,我当然不希望每一段ObservableCollection<string>
内容成为TextBox!现在我通过将资源添加到单个控件的资源集合来限制范围,这非常有效,除非我想创建第二个这样的控件,我将复制并粘贴大量的模板代码,这似乎不对。
允许选择性重复使用此选项的最佳方法是什么?这是我目前拥有的一个例子:
string
答案 0 :(得分:1)
您可以将要重复使用的数据模板资源定义为一个单独的文件ResourceDictionary,然后使用合并的字典在用户控件中使用它们。
我希望它有所帮助。
答案 1 :(得分:1)
在DataTemplates
中定义ResourceDictionary
,并将此ResourceDictionary
添加到您希望应用模板的每个ContentControl
:
<ContentControl Grid.Column="1" Content="{Binding Value}" Padding="0,10,0,0" >
<ContentControl.Resources>
<ResourceDictionary Source="Dictionary1.xaml" />
</ContentControl.Resources>
</ContentControl>
<强> Dictionary1.xaml:强>
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<DataTemplate DataType="{x:Type sys:Boolean}">
<CheckBox Width="64" IsChecked="{Binding Path=.}" />
</DataTemplate>
<DataTemplate DataType="{x:Type sys:String}">
<TextBox Width="100" Text="{Binding Path=.}"/>
</DataTemplate>
<DataTemplate DataType="{x:Type ViewModel:StringList}">
<DataGrid ItemsSource="{Binding Path=.}" AutoGenerateColumns="False" HeadersVisibility="None" CanUserAddRows="True" Width="100" Height="50">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path=.}" Width="*" />
</DataGrid.Columns>
</DataGrid>
</DataTemplate>
</ResourceDictionary>