/// <summary> /// A control has send an event that it has (been) browsing to a new location. /// Lets sync this with all other controls. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Control_BrowseEvent(object sender, FileSystemModels.Browse.BrowsingEventArgs e) { if (e.IsBrowsing == false && e.Result == BrowseResult.Complete) { var request = new BrowseRequest(e.Location); FinalBrowseResult browseResult = null; if (FolderTextPath != sender) { // Navigate Folder ComboBox to this folder browseResult = FolderTextPath.NavigateTo(request); if (browseResult.Result != BrowseResult.Complete) { return; } } if (FolderItemsView != sender) { // Navigate Folder/File ListView to this folder browseResult = FolderItemsView.NavigateTo(request); if (browseResult.Result != BrowseResult.Complete) { return; } } if (browseResult != null) // There should be at least one succesfull browse { // to change selection and log history if (browseResult.Result == BrowseResult.Complete) { // Log location into history of recent locations SelectedFolder = request.NewLocation.Path; NaviHistory.Forward(request.NewLocation); } } } else { if (e.IsBrowsing == true) { if (FolderTextPath != sender) { // Navigate Folder ComboBox to this folder FolderTextPath.SetExternalBrowsingState(true); } if (FolderItemsView != sender) { // Navigate Folder/File ListView to this folder FolderItemsView.SetExternalBrowsingState(true); } } } }
/// <summary> /// Initializes the Navigational History with sample items. /// </summary> public void Init() { NaviHistory.Forward(new LocationItem(@"C:\")); NaviHistory.Forward(new LocationItem(@"F:\Program Files\My Program\My Dir 1\My Dir 2")); NaviHistory.Forward(new LocationItem(@"F:\")); NaviHistory.Forward(new LocationItem(@"F:\Temp")); NaviHistory.Forward(new LocationItem(@"F:\Temp\More Files")); NaviHistory.Forward(new LocationItem(@"G:\")); NaviHistory.Forward(new LocationItem(@"H:\")); }
/// <summary> /// Master controler interface method to navigate all views /// to the folder indicated in <paramref name="folder"/> /// - updates all related viewmodels. /// </summary> /// <param name="request"></param> private async Task <FinalBrowseResult> NavigateToFolderAsync(BrowseRequest request, object sender) { // Make sure the task always processes the last input but is not started twice await _SlowStuffSemaphore.WaitAsync(); try { var newPath = request.NewLocation; var cancel = request.CancelTok; if (cancel != null) { cancel.ThrowIfCancellationRequested(); } TreeBrowser.SetExternalBrowsingState(true); FolderItemsView.SetExternalBrowsingState(true); FolderTextPath.SetExternalBrowsingState(true); FinalBrowseResult browseResult = null; // Navigate TreeView to this file system location if (TreeBrowser != sender) { browseResult = await TreeBrowser.NavigateToAsync(request); if (cancel != null) { cancel.ThrowIfCancellationRequested(); } if (browseResult.Result != BrowseResult.Complete) { return(FinalBrowseResult.FromRequest(request, BrowseResult.InComplete)); } } // Navigate Folder ComboBox to this folder if (FolderTextPath != sender) { browseResult = await FolderTextPath.NavigateToAsync(request); if (cancel != null) { cancel.ThrowIfCancellationRequested(); } if (browseResult.Result != BrowseResult.Complete) { return(FinalBrowseResult.FromRequest(request, BrowseResult.InComplete)); } } if (cancel != null) { cancel.ThrowIfCancellationRequested(); } // Navigate Folder/File ListView to this folder if (FolderItemsView != sender) { browseResult = await FolderItemsView.NavigateToAsync(request); if (cancel != null) { cancel.ThrowIfCancellationRequested(); } if (browseResult.Result != BrowseResult.Complete) { return(FinalBrowseResult.FromRequest(request, BrowseResult.InComplete)); } } if (browseResult != null) { if (browseResult.Result == BrowseResult.Complete) { SelectedFolder = newPath.Path; // Log location into history of recent locations NaviHistory.Forward(newPath); } } return(browseResult); } catch (Exception exp) { var result = FinalBrowseResult.FromRequest(request, BrowseResult.InComplete); result.UnexpectedError = exp; return(result); } finally { TreeBrowser.SetExternalBrowsingState(true); FolderItemsView.SetExternalBrowsingState(false); FolderTextPath.SetExternalBrowsingState(false); _SlowStuffSemaphore.Release(); } }