public static void SyncCollection <TSrc, TDest>(ObservableCollection <ITreeLeaf> src, ObservableCollection <ITreeLeaf> dest, ITreeBranch parent, Func <TSrc, TDest, bool> itemsEquals, Func <TSrc, TDest> getDestItem) where TDest : class, ITreeLeaf { // Remove foreach (var o in dest.OfType <TDest>().Where(d => !src.OfType <TSrc>().Any(s => itemsEquals(s, d))).ToArray()) { dest.Remove(o); o.Parent = null; } // Insert or Move for (var i = 0; i < src.Count; i++) { if (src[i] is not TSrc srcItem) { continue; } if (i < dest.Count && itemsEquals(srcItem, (TDest)dest[i])) { continue; } var destItem = getDestItem(srcItem); var oldIdx = dest.IndexOf(destItem); if (oldIdx < 0) { dest.Insert(i, destItem); destItem.Parent = parent; } else { dest.Move(oldIdx, i); } } }
public VideoClipsGroupTreeVM(VideoClipsGroupM model, ITreeBranch parent) { Model = model; Parent = parent; }
public void visit(ITreeBranch item_to_visit) { item_to_visit.add_child("Add New Income", ApplicationIcons.AddIncome, new EmptyCommand()); }
public ViewerTreeVM(ViewerM model, ITreeBranch parent) { Model = model; Parent = parent; }
public void visit(ITreeBranch item_to_visit) { item_to_visit.add_child("Add Bills", ApplicationIcons.AddIncome, () => command.run<IAddCompanyPresenter>()); }
public FolderTreeVM(FolderM model, ITreeBranch parent) { Model = model; Parent = parent; }
public DriveTreeVM(FolderM model, ITreeBranch parent) : base(model, parent) { }
public void visit(ITreeBranch item_to_visit) { item_to_visit.add_child("View All Bills", ApplicationIcons.AddIncome, command); }
public FolderKeywordTreeVM(FolderKeywordM model, ITreeBranch parent) { Model = model; Parent = parent; }