WPF和ObservableCollection <T>

Kin*_*isG 4 .net c# wpf observablecollection

我有一个ObservableCollection<IRuleCondition>我要显示的 - IRuleCondition接口由我想要显示的2个不同的类使用,一个RuleCondition只显示一个规则条件(诸如优先级,要检查的属性等信息),以及RuleConditionGroup可以包含2的a或者更多RuleConditions,以任何条件可以匹配的方式分组,或者所有等.

在XAML中我想知道有没有办法ListView.ItemTemplate根据它遇到的类型显示不同的ObservableCollection<IRuleCondition>?或者我需要实现两个不同ObservableCollection的?

par*_*mar 9

这是一个如何工作的简单示例

这是对象的定义方式

public interface Person
{
    string Name { get; set; }
}

public class Manager : Person
{
    public string Name { get; set; }
}

public class Employee : Person
{
    public string Name { get; set; }
    public string ManagerName { get;set;}
}
Run Code Online (Sandbox Code Playgroud)

这是后面的MainWindow代码

public partial class MainWindow : Window
    {
        ObservableCollection<Person> mPeople = new ObservableCollection<Person>();

        public ObservableCollection<Person> People
        {
            get
            {
                return mPeople;
            }
        }

        public MainWindow()
        {
            DataContext = this;
            mPeople.Add( new Employee{ Name = "x" , ManagerName = "foo"});
            mPeople.Add( new Manager { Name = "y"});

            InitializeComponent();
        }
    }
Run Code Online (Sandbox Code Playgroud)

这是MainWindow XAML

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:my="clr-namespace:WpfApplication1"
        Title="MainWindow"
        Height="350"
        Width="525">
    <Window.Resources>
        <DataTemplate  DataType="{x:Type my:Employee}">
            <StackPanel Background="Green" Width="300">
                <TextBlock Text="{Binding Name}" />
                <TextBlock Text="{Binding ManagerName}" />
            </StackPanel>
        </DataTemplate>
        <DataTemplate  DataType="{x:Type my:Manager}">
            <StackPanel Background="Red"
                        Width="300">
                <TextBlock Text="{Binding Name}" />
            </StackPanel>
        </DataTemplate>

    </Window.Resources>
    <Grid>
        <ListBox ItemsSource="{Binding People}"></ListBox>
    </Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)

如您所见,有两个数据窗口,一个用于Manager,另一个用于Employee

在此输入图像描述

而这就是糟糕的输出效果.请注意,与经理相比,员工显示的绿色和红色背景和额外字段