2014-10-22 2 views
-1

treeview에 표시 할 데이터를 생성하는 함수를 만들고 싶습니다. 하지만 아래 코드에 문제가 있습니다. 제발 도와주세요.ObservableCollection에서 유형을 변경하는 방법 <object> to ObservableCollection <class> wpf에서 #

//Class for hold all data 
public class DataControl 
{ 
    public string Type { get; set; } 
    public ObservableCollection<object> Data; 

    //constructor 
    public DataControl(string type, ObservableCollection<object> data) 
    { 
     Type = type; 
     Data = data; 
    } 
} 

클래스 데이터 모델 ====================== ====== 어쨌든 쇼 트리보기

public class ShowTreeView 
{ 
    public ObservableCollection<DataControl> DataStore { get; set; } 
    public ObservableCollection<MyData> Data { get; set; } 

    //Function Show Data In Tree View 
    public void ShowData() 
    { 
     for (int i = 0; i <= 5; i++) 
     { 
      var obj = new MyData { Id = "0", Name = "Name1" }; 
      Data.Add(obj); 

      //How do i can convert type from ObservableCollection<object> to 
      //ObservableCollection<MyData> 
      //Please help me. 
      // Thank you very much. 
      var tree= new DataControl(i.ToString(), Data); //Error code. 
      DataStore.Add(tree); 
     } 
    } 
} 

에 대한

public class MyData 
{ 
    public string Id { get; set; } 
    public string Name { get; set; } 
} 

클래스, 나는 어떻게 MVVM에서 TreeView 컨트롤에서 데이터를 표시하는 동적 기능을 만들 물어보고 싶은?

미리 감사드립니다. D

+0

이 유 ObservationCollection 및 ObservationCollection 무엇을 의미합니까를 ??? – jadavparesh06

+1

어쨌든'object'를 사용하는 콜렉션이 왜 있습니까? MyData를 사용하십시오. – nvoigt

+0

왜냐하면, 내가 원하는 곳 어디에서도 사용할 수 있기 때문입니다. –

답변

0

수 없습니다. (당신이 Int32의 컬렉션에 유형 Tiger의 개체를 추가하려는)

var ints = new ObservableCollection<int>(); 
foo(ints); 

당신은 무효입니다 상상할 수 있듯이이 시나리오에서 호출

void foo(ObservableCollection<object> collection) { 
    collection.Add(new Tiger()); 
} 

을 :이 방법을 상상해보십시오. 당신이 할 수있는 일은 foo()관찰 할 수있는 인터페이스를 허용하도록 변경하는 것입니다. : INotifyCollectionChanged. 귀하의 클래스는 다음이 될 것이다 (경우) 당신이 DataControl 내부 컬렉션을 수정해야하는 경우

public class DataControl { 
    public string Type { get; set; } 
    public INotifyCollectionChanged Data; 

    public DataControl(string type, INotifyCollectionChanged data) { 
     Type = type; 
     Data = data; 
    } 
} 

당신은 단순히 적절한 유형으로 캐스팅 할 수있다 (그러나 IMO이 DataControl 계약을 위반하는 것입니다). 상상 당신은 수집을 관찰하고 당신은이 핸들러가 :

void OnObservedCollectionChanged(object sender, NotifyCollectionChangedEventArgs e) { 
    if (e.Action == NotifyCollectionChangedAction.Add) 
     AddNewItemsToTreeView(e.NewItems); // NewItems are all "untyped" object 
} 
+0

답장을 보내 주셔서 감사합니다. : D –

+0

죄송합니다.하지만 MVVM의 트리 뷰에 데이터를 표시하는 함수를 만들 생각이 있으십니까? –

관련 문제