我有一个dataGrid,它使用observableCollection
来绑定ItemsSource
属性(MVVM模式)。所以在我的viewmodel中,我有一个observableCollection
(myCollection
)的属性。但是,这个dataGrid可以显示两种不同类型的信息,它们是在运行时决定的。
通常情况下,我在此处使用observableCollection:
ObservableCollection<myType> myCollection = new ObservableCollection<myType>();
但是现在,我有一个字符串作为参数,告诉我我需要什么类型,所以我想做类似的事情:
if(parameter == "TypeA")
{
myCollection = new ObservableCollection<TypeA>();
}
if(parameter == "TypeB")
{
myCollection = new ObservableCollection<TypeB>();
}
可以这样做吗?
答案 0 :(得分:1)
如果使TypeA和TypeB派生自公共基类或接口,则可以保留相同的集合。
但是如果你想要两个不同的集合,你可以提高集合属性以通知有关更改的类型。
IEnumerable MyCollection
{
get
{
if(CurrentType == typeof(TypeB)
return myTypeBCollection;
else if(CurrentType == typeof(TypeA)
return myTypeACollection;
}
}
所以你在视图中绑定MyCollection到ItemsSource,并提出该属性已经改变。
请记住,您可能需要一个不同的DataTemplate,其中DataTemplateSelector可能派上用场。
答案 1 :(得分: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; }
}