0

我应该怎么做?我尝试了以下方法:

在 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 重复的错误

4

2 回答 2

4

删除x:Key参数。隐式 DataTemplates 是您想要的。

编辑:这是一个非常小的工作示例:

主窗口.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 { }
}

主窗口.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>
于 2012-11-08T12:37:58.480 回答
1

嗯,有像@Sisyphe 提到的隐式数据模板。

但是您真正的问题是,您将两个模板命名为相同的东西。x:Key是一个字典键,它需要在其范围内是唯一的。这就是错误所在。

话虽如此,在@Sisyphe 提到的这种情况下,您最好使用隐式数据模板。

于 2012-11-08T12:47:49.797 回答