using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections.ObjectModel; using Aiwaz.Contracts; using System.Collections.Specialized; using System.Windows.Controls; using System.Windows.Media; using System.Reflection; using System.IO; using System.Windows.Media.Imaging; namespace Aiwaz.Editor.ViewModels { public class ResourceViewModel : ViewModelBase { private bool creating; public IResource Resource; public string DisplayName { get { return Resource.WellKnownName; } set { Resource.WellKnownName = value; } } public ImageSource DisplayIcon { get { var stream = File.OpenRead("Resources/icon.png"); BitmapImage bitmap = new BitmapImage(); bitmap.BeginInit(); bitmap.StreamSource = stream; bitmap.EndInit(); return bitmap; } } private ObservableCollection nodes; public ObservableCollection Nodes { get { if (nodes == null) { nodes = new ObservableCollection(); nodes.CollectionChanged += new NotifyCollectionChangedEventHandler(nodes_CollectionChanged); } return nodes; } set { if (nodes != value) { nodes = value; OnPropertyChanged("Nodes"); } } } void nodes_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) { if (creating) return; if (e.Action == NotifyCollectionChangedAction.Add) { foreach (ResourceViewModel newItem in e.NewItems) { Resource.Children.Insert(e.NewStartingIndex, newItem.Resource); } } else if (e.Action == NotifyCollectionChangedAction.Remove) { foreach (ResourceViewModel oldItem in e.OldItems) { Resource.Children.Remove(oldItem.Resource); } } OnPropertyChanged("Nodes"); } public ResourceViewModel(IResource resource) { this.Resource = resource; creating = true; if (resource.Children != null) foreach (var child in resource.Children) { Nodes.Add(new ResourceViewModel(child)); } creating = false; OnPropertyChanged("Nodes"); } } }