我应该怎么做?我尝试了以下方法:
在Xaml中:
<DataTemplate x:Key="LogDataTemplate" DataType="data:Type1">
<TextBlock Text="Type1" />
</DataTemplate>
<DataTemplate x:Key="LogDataTemplate" DataType="data:Type2">
<TextBlock Text="Type2" />
</DataTemplate>
</ResourceDictionary>
</UserControl.Resources>
<ListBox ItemsSource="{Binding source}"
ItemTemplate="{StaticResource LogDataTemplate}" />
</UserControl>
在视图模型中(设置为UserControl的DataContext):
member x.source = new ObservableCollection<Object>()
但是有关于DataTemplate重复的错误
答案 0 :(得分:4)
删除x:Key
参数。 Implicit DataTemplates就是你想要的。
编辑:这是一个非常小的工作示例:
<强> MainWindow.xaml.cs 强>
using System.Collections.ObjectModel;
using System.Windows;
namespace StackOverflow
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = this;
Rectangles = new ObservableCollection<object>() { new RedRectangle(), new BlueRectangle() };
}
public ObservableCollection<object> Rectangles { get; set; }
}
public class RedRectangle { }
public class BlueRectangle { }
}
<强> MainWindow.xaml 强>
<Window x:Class="StackOverflow.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:StackOverflow"
Width="500" Height="300">
<Window.Resources>
<DataTemplate DataType="{x:Type local:RedRectangle}">
<Rectangle Width="16" Height="16" Fill="Red" />
</DataTemplate>
<DataTemplate DataType="{x:Type local:BlueRectangle}">
<Rectangle Width="16" Height="16" Fill="Blue" />
</DataTemplate>
</Window.Resources>
<ListBox ItemsSource="{Binding Rectangles}" />
</Window>
答案 1 :(得分:1)
那里有隐含的数据模板,如@Sisyphe提及。
但你真正的问题是,你已经将两个模板命名为同一个东西。 x:Key
是字典键,在其范围内需要是唯一的。这就是错误所在。
话虽如此,在这种情况下你会更好地使用隐式数据模板作为@Sisyphe提及。