From e338ae31ca6e8939b51abca02865f13a99f2b455 Mon Sep 17 00:00:00 2001 From: Tiberiu Chibici Date: Sun, 7 Sep 2014 14:25:39 +0300 Subject: [PATCH] Project panel now updates when a file is added to project tree. --- RainmeterStudio/Business/ProjectManager.cs | 7 +++++-- .../UI/ViewModel/ReferenceViewModel.cs | 21 +++++++++++-------- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/RainmeterStudio/Business/ProjectManager.cs b/RainmeterStudio/Business/ProjectManager.cs index 0d94c57a..dbc0e526 100644 --- a/RainmeterStudio/Business/ProjectManager.cs +++ b/RainmeterStudio/Business/ProjectManager.cs @@ -27,7 +27,7 @@ namespace RainmeterStudio.Business #endregion - #region Callbacks + #region Events /// /// Called when a project is opened or the active project closes. @@ -123,7 +123,10 @@ namespace RainmeterStudio.Business { _projectTemplates.Add(template); } - + + /// + /// Gets a list of existing project templates + /// public IEnumerable ProjectTemplates { get { return _projectTemplates; } } } } diff --git a/RainmeterStudio/UI/ViewModel/ReferenceViewModel.cs b/RainmeterStudio/UI/ViewModel/ReferenceViewModel.cs index 0e34e74a..0d9533aa 100644 --- a/RainmeterStudio/UI/ViewModel/ReferenceViewModel.cs +++ b/RainmeterStudio/UI/ViewModel/ReferenceViewModel.cs @@ -1,10 +1,12 @@ using System; using System.Collections.Generic; +using System.Collections.ObjectModel; using System.Collections.Specialized; using System.ComponentModel; using System.Linq; using System.Text; using RainmeterStudio.Core.Model; +using RainmeterStudio.Core.Utils; namespace RainmeterStudio.UI.ViewModel { @@ -13,7 +15,7 @@ namespace RainmeterStudio.UI.ViewModel /// public class ReferenceViewModel : INotifyPropertyChanged, INotifyCollectionChanged { - private List _children = null; + private ObservableCollection _children = new ObservableCollection(); #region Properties @@ -47,7 +49,7 @@ namespace RainmeterStudio.UI.ViewModel /// /// Gets an enumerable of this object's children /// - public IEnumerable Children + public ObservableCollection Children { get { @@ -118,10 +120,10 @@ namespace RainmeterStudio.UI.ViewModel { Reference = reference; Reference.CollectionChanged += Reference_CollectionChanged; - UpdateChildren(); + RefreshChildren(); } - void Reference_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) + private void Reference_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) { List newItems = new List(); List oldItems = new List(); @@ -143,12 +145,12 @@ namespace RainmeterStudio.UI.ViewModel break; default: - UpdateChildren(); + RefreshChildren(); break; } - _children.RemoveAll(oldItems.Contains); - _children.AddRange(newItems); + oldItems.ForEach(x => _children.Remove(x)); + newItems.ForEach(_children.Add); // Pass event if (CollectionChanged != null) @@ -168,9 +170,10 @@ namespace RainmeterStudio.UI.ViewModel IsExpanded = value; } - private void UpdateChildren() + private void RefreshChildren() { - _children = Reference.Children.Select(x => new ReferenceViewModel(x)).ToList(); + _children.Clear(); + Reference.Children.Select(x => new ReferenceViewModel(x)).ForEach(_children.Add); } #endregion