0

我有一个 dataGrid,它使用一个observableCollection来绑定ItemsSource属性(MVVM 模式)。因此,在我的视图模型中,我有一个observableCollection ( myCollection) 属性。但是,这个 dataGrid 可以显示两种不同类型的信息,它们是在运行时决定的。

通常,我在此使用 observableCollection:

ObservableCollection<myType> myCollection = new ObservableCollection<myType>();

但是现在,我有一个字符串作为参数,告诉我我需要什么类型,所以我想做这样的事情:

if(parameter == "TypeA")
{
    myCollection = new ObservableCollection<TypeA>();
}

if(parameter == "TypeB")
{
    myCollection = new ObservableCollection<TypeB>();
}

可以这样做吗?

4

2 回答 2

1

如果你让 TypeA 和 TypeB 从一个公共的基类或接口派生,你可以保持相同的集合。

但是如果你想要两个不同的集合,你可以提高集合属性来通知改变的类型。

IEnumerable MyCollection
{
    get
    {
        if(CurrentType == typeof(TypeB)
            return myTypeBCollection;
        else if(CurrentType == typeof(TypeA)
            return myTypeACollection;
    }
}

因此,您将视图中的 MyCollection 绑定到 ItemsSource,并提出该属性已更改。

请记住,您可能需要不同的 DataTemplate,DataTemplateSelector 可能会派上用场。

于 2012-06-05T14:55:42.770 回答
0

只需使用动态关键字而不是精确类型在运行时声明 ObservableCollection

private ObservableCollection<dynamic> DynamicObservable(IEnumerable source)
    {

        ObservableCollection<dynamic> SourceCollection = new ObservableCollection<dynamic>();

        SourceCollection.Add(new MobileModelInfo { Name = "iPhone 4", Catagory = "Smart Phone", Year = "2011" });

        SourceCollection.Add(new MobileModelInfo { Name = "S6", Catagory = "Ultra Smart Phone", Year = "2015" });

        return SourceCollection;

    }

public class MobileModelInfo
{
    public string Name { get; set; }
    public string Catagory { get; set; }
    public string Year { get; set; }
}
于 2015-11-16T12:59:49.767 回答