2012-06-05 2 views
0

observableCollection을 사용하여 ItemsSource 속성 (MVVM 패턴)을 바인딩하는 dataGrid가 있습니다. 따라서 내 뷰 모델에는 observableCollection (myCollection)이라는 속성이 있습니다. 그러나이 dataGrid는 런타임에서 결정되는 두 가지 유형의 정보를 표시 할 수 있습니다.observableCollection : 런타임에 유형을 설정하는 방법은 무엇입니까?

일반적으로, 나는이 거리로하여 ObservableCollection에를 사용

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

그러나 지금, 나는 내가 필요로하는 어떤 종류의 저 말을 매개 변수로 문자열을, 그래서 나는 그런 일을하고 싶습니다 :

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

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

할 수 있습니까?

답변

1

TypeA와 TypeB를 공통 기본 클래스 또는 인터페이스에서 파생시킨 경우 동일한 컬렉션을 유지할 수 있습니다.

그러나 두 개의 다른 콜렉션이 필요하면 콜렉션 특성을 올려서 변경된 유형에 대해 통지 할 수 있습니다.

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

그래서보기에서 ItemsSource에 MyCollection을 바인딩하고 속성이 변경되었음을 알립니다.

DataTemplateSelector가 도움이 될 수있는 다른 DataTemplate이 필요할 수도 있습니다.

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; } 
} 
관련 문제