public async Task DeleteDirectoryRowEvent() { IRowViewModel deleteRowEventParent = null, deleteRowEventChild = null; using (var testDirectory = new Infrastructure.TestDirectory()) { Infrastructure.TestDirectory.CreateFiles(testDirectory.CreateDirectory("Dir"), new Dictionary <string, DateTime> { { "File", DateTime.Now } }); var synchronizedDirectories = new TestSynchronizedItems(new Directory(testDirectory.FullPath, null, new ItemFactory())); var factory = new RowViewModelFactory(); factory.DeleteRowEvent += (IRowViewModel parent, IRowViewModel child) => { deleteRowEventParent = parent; deleteRowEventChild = child; }; var rowViewModel = factory.CreateRowViewModel(synchronizedDirectories); await synchronizedDirectories.Load(); var level1Child = synchronizedDirectories.ChildItems[0]; var level2Child = level1Child.ChildItems[0]; ((TestSynchronizedItems)level1Child).IsDeleted(); Assert.NotNull(deleteRowEventParent); Assert.NotNull(deleteRowEventChild); Assert.Equal(synchronizedDirectories.LeftItem.Name, deleteRowEventParent.LeftItem.Name); Assert.Equal(level1Child.LeftItem.Name, deleteRowEventChild.LeftItem.Name); } }
/// <summary> /// Конструктор. /// </summary> /// <param name="leftItem">Элемент слева.</param> /// <param name="rightItem">Элемент справа.</param> public RowViewModel(IItemViewModel leftItem, IItemViewModel rightItem, IRowViewModel parent) { LeftItem = leftItem; RightItem = rightItem; ChildRows = new ObservableCollection <IRowViewModel>(); SetItemViewModelEvents(LeftItem); SetItemViewModelEvents(RightItem); }
private void AddChildRows(IRowViewModel row, ISynchronizedItems synchronizedItems) { foreach (var child in synchronizedItems.ChildItems) { var childRow = CreateRowViewModel(child); child.DeletedEvent += () => { DeleteRowEvent?.Invoke(row, childRow); }; AddRowEvent?.Invoke(row, childRow); } }
private void SubscribeOnErrors(IRowViewModel row) { row.SyncErrorEvent += (string error) => { _dispatcher.Invoke(() => { AddToLog(error); }); }; foreach (var childRow in row.ChildRows) { SubscribeOnErrors(childRow); } }
private void DeleteRow(IRowViewModel parentRow, IRowViewModel childRow) { if (parentRow == null) { _dispatcher.Invoke(() => Rows.Remove(childRow)); PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Rows))); } else { _dispatcher.Invoke(() => parentRow.ChildRows.Remove(childRow)); PropertyChanged?.Invoke(parentRow, new PropertyChangedEventArgs(nameof(parentRow.ChildRows))); } childRow.SyncErrorEvent -= AddToLog; }