C# 协方差,通用,用户控制

C# 协方差,通用,用户控制,c#,wpf,C#,Wpf,我创建了一个用户控件,其中包含一个可观察集合。我学会了我不能将说observedcollection转换为observedcollection。我找到的解决方案是添加一个helper类来处理所有低级集合操作。我怀疑有一个更优雅的解决方案,如果是的话,也许有人可以告诉我这个方向 请参阅下面捕获问题和我的解决方案的代码Zoo对应于WPF用户控件。(实际上是一种od动物的动物园。)理想情况下,我会将其定义为zoo,即作为泛型类型,但这会阻止我使用XAML。我需要将动物定义为对象,以便分配给它 clas

我创建了一个用户控件,其中包含一个
可观察集合
。我学会了我不能将说
observedcollection
转换为
observedcollection
。我找到的解决方案是添加一个helper类来处理所有低级集合操作。我怀疑有一个更优雅的解决方案,如果是的话,也许有人可以告诉我这个方向

请参阅下面捕获问题和我的解决方案的代码
Zoo
对应于WPF用户控件。(实际上是一种od动物的动物园。)理想情况下,我会将其定义为
zoo
,即作为泛型类型,但这会阻止我使用XAML。我需要将
动物
定义为
对象
,以便分配给它

class Program
{
    public static void Main(string[] args)
    {
        Zoo zoo = new Zoo();
        List<Tiger> tigers = new List<Tiger>() { new Tiger() };
        zoo.Animals = tigers;
        zoo.Helper = new TigerHelper(tigers);

        Console.WriteLine(zoo.GetCount());
        Console.ReadLine();
    }
}
public class Animal { }
public class Tiger : Animal { }

public interface Helper { int GetCount(); }
public class TigerHelper : Helper
{
    private List<Tiger> tigers;
    public TigerHelper(List<Tiger> tigers) { this.tigers = tigers; }
    public int GetCount() { return tigers.Count; }
}

public class Zoo
{
    public object Animals { get; set; }
    public Helper Helper { get; set; }
    public int GetCount() { return Helper.GetCount(); }
}
类程序
{
公共静态void Main(字符串[]args)
{
动物园=新动物园();
列表老虎=新列表(){new Tiger()};
动物园。动物=老虎;
zoo.Helper=新虎狼(老虎);
Console.WriteLine(zoo.GetCount());
Console.ReadLine();
}
}
公营动物{}
公营老虎:动物{}
公共接口帮助程序{int GetCount();}
公共类老虎助手:助手
{
私人名单老虎;
公共老虎助手(列出老虎){this.tigers=tigers;}
public int GetCount(){return tigers.Count;}
}
公立动物园
{
公共对象{get;set;}
公共助手{get;set;}
public int GetCount(){return Helper.GetCount();}
}

您可以使用。这使您可以访问列表的大部分功能,但不需要泛型。例如,您仍然可以访问
Count
属性:

    public class Zoo
    {
        public IList Animals { get; set; }
        public Helper Helper { get; set; }
        public int GetCount() { return Animals.Count; }
    }

看看ItemsControl。它是一个容器元素,用于所有类型的项对象。您不需要泛型。我的UserControl中的XAML由一个TabControl组成。我不知道如何利用ItemsControl。TabControl是ItemsControl。看看是的,这确实是软件工程的问题,而不是堆栈溢出的问题