2014-10-22 5 views
-1

Я хочу создать функцию для генерации данных для отображения в treeview. Но имейте некоторые проблемы с кодом ниже, пожалуйста, помогите мне. Модель данныхКак изменить тип с ObservableCollection <object> на ObservableCollection <class> в wpf C#

//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 MyData 
{ 
    public string Id { get; set; } 
    public string Name { get; set; } 
} 

класс для шоу Tree View

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); 
     } 
    } 
} 

во всяком случае, я хочу спросить, Как создать динамическую функцию, чтобы показать данные управления TreeView в MVVM?

Заранее благодарен: D

+0

Что у подразумевает под ObservationCollection и ObservationCollection ??? – jadavparesh06

+1

Почему ваша коллекция использует 'object' в любом случае? Используйте 'MyData'. – nvoigt

+0

потому что, я хочу назвать его, чтобы использовать везде, где захочу. –

ответ

0

Вы не можете. Представьте, у вас есть этот метод:

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

Called в этом сценарии:

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

Как вы можете себе представить, что это недопустимый (вы пытаетесь добавить объект типа Tiger в коллекцию Int32). Что вы можете сделать, так это изменить foo(), чтобы принять интерфейс, который делает коллекцию observable: INotifyCollectionChanged. Ваш класс будет стать:

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

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

Если (в случае), вы должны изменить свою коллекцию внутри DataControl вы можете просто бросить его в соответствующий тип (но ИМО это нарушит DataControl контракт). Представьте себе, вы наблюдаете такую ​​коллекцию и у вас есть этот обработчик:

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

Спасибо за ваш ответ. : D –

+0

Извините, но у вас есть идея создать функцию для отображения данных в treeview в MVVM? –

Смежные вопросы