我在单独的文件中有一个ListBox和多个DataTemplate

<ListBox ItemTemplate="{StaticResource ItemTemplate1}"/>


Styles.xaml文件中:

<DataTemplate x:Key="ItemTemplate1">...</DataTemplate>

<DataTemplate x:Key="ItemTemplate2">...</DataTemplate>


我想根据其列表中对象的类型更改ItemTemplateListBox

有没有办法在后面的代码中访问单独的DataTemplate,以便可以绑定到Page的属性?

最佳答案

不使用TemplateSelector的方法是指定DataType属性,而不指定x:Key。

<DataTemplate DataType="{x:Type Type1}">...</DataTemplate>
<DataTemplate DataType="{x:Type Type2}">...</DataTemplate>


在这种情况下,将在绑定了指定类型的属性的所有位置自动应用适当的DataTemplate。

但是我更喜欢使用TemplateSelector

要在代码后面访问单独的DataTemplate,您首先应该获取资源字典:

var dict = new ResourceDictionary
{Source = new Uri("/ProjectNamespace;component/Styles.xaml",  UriKind.Relative)};


然后,您可以获取模板:

var dataTemplate = (DataTemplate) dict["ItemTemplate1"];

关于c# - 动态绑定(bind)到DataTemplate,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12880896/

10-12 19:43