private async Task <bool> LoadTree() { List <ArmtesElement> items = null; await Task.Factory.StartNew(() => { byte attempts = 1; items = null; while (items == null && attempts <= 3) { if (armtes.LastException != null) { if ((armtes.LastException as WebException) == null) { break; } } if (progressController != null) { if (progressController.IsCanceled) { break; } } if (progressController != null) { this.Dispatcher.Invoke(new Action(() => { if (progressController.IsOpen) { progressController.SetMessage(String.Format("{0}\r\n{1}-я попытка ...", "Загрузка списка объектов", attempts)); } })); } items = armtes.GetElements("e0"); attempts++; } }); if (items == null || items.Count == 0) { string errorDescription = this.GetNetErrorDescription(armtes.LastException); await this.ShowErrorMessageAsync(String.Format("Список объектов не получен!{0}Описание ошибки: {1}", Environment.NewLine, errorDescription)); return(false); } ArmtesElement root = items.FirstOrDefault <ArmtesElement>(); ExecuteExpandingCommand(root); //TODO: А надо ли? items = new List <ArmtesElement>(); items.Add(root); this.tree.ItemsSource = items; return(true); }
private void GetTreeElement(ArmtesElement parent) { string loading = "Loading..."; if (parent.Items.Count == 1 && parent.Items[0].Label == loading) { List <ArmtesElement> items = null; this.Dispatcher.Invoke(new Action(() => tree.Cursor = Cursors.Wait)); items = armtes.GetElements(parent.Value); if (items == null) { string errorDescription = this.GetNetErrorDescription(armtes.LastException); this.ShowErrorMessage(errorDescription); } else { parent.Items.Clear(); parent.Items.AddRange(items); // установка родителя foreach (var item in items) { item.Parent = parent; } } } else { //System.Diagnostics.Debugger.Break(); } this.Dispatcher.Invoke(new Action(() => { tree.Cursor = Cursors.Arrow; })); }
private void ExecuteExpandingCommand(object obj) { if (null == obj) { return; } RoutedEventArgs args = obj as System.Windows.RoutedEventArgs; ArmtesElement element = null; System.Windows.Controls.TreeViewItem tvi = null; if (null == args) { if (obj is System.Windows.Controls.TreeViewItem) { tvi = obj as System.Windows.Controls.TreeViewItem; if (tvi.Header is ArmtesElement) { element = tvi.Header as ArmtesElement; } } else { element = obj as ArmtesElement; } if (null == element) { return; } else { if (null == element.Items) { return; } SetAppStatus("Загрузка данных подразделения..."); GetTreeElement(element); SetAppStatus(); } } else { if (null == args.Source) { return; } System.Windows.Controls.TreeViewItem treeViewItem = args.Source as System.Windows.Controls.TreeViewItem; if (null == treeViewItem) { return; } if (null == treeViewItem.Header) { return; } element = treeViewItem.Header as ArmtesElement; if (null == element) { return; } if (null == element.Items) { return; } if (element.Items.Count > 1) { return; } args.Handled = true; SetAppStatus("Загрузка данных подразделения..."); GetTreeElement(element); SetAppStatus(); } }