将不同的数据拉入ListBox

时间:2012-11-08 12:33:37

标签: wpf

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

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

2 个答案:

答案 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提及。