/// <summary> /// 通过车辆找到TreeViewData /// </summary> /// <param name="car"></param> /// <returns></returns> public SLTreeViewItem GeTreeViewItemByCar(SLCar car) { if (car == null) { return(null); } SLTreeViewItem rItem = null; if (HasItems) { foreach (SLTreeViewItem x in Items) { if (x.DataCar != null && x.DataCar == car) { rItem = x; break; } rItem = x.GeTreeViewItemByCar(car); if (rItem != null) { break; } } return(rItem); } else { return(rItem); } }
/// <summary> /// 展开车辆 /// </summary> /// <param name="car"></param> public void ExpandCar(SLCar car) { SLTreeViewItem data = RootTreeViewItem.GeTreeViewItemByCar(car); if (data != null) { var datas = data.GeTreeViewItemParents(false); if (!datas.Any()) { return; } //datas.ForEach(x => x.IsExpanded = true); tv.ExpandPath(datas); tv.SelectItem(data); if (tv.SelectedItem == null || tv.SelectedItem != data) { DispatcherTimer timer = new DispatcherTimer(); timer.Tick += (sender, args) => { tv.SelectItem(data); if (tv.SelectedItem != null && tv.SelectedItem == data) { timer.Stop(); timer = null; } }; timer.Interval = new TimeSpan(0, 0, 0, 0, 300); timer.Start(); } } }
/// <summary> /// 双击事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void SLTreeViewItem_DoubleClicked(object sender, EventArgs e) { SLTreeViewItem item = (SLTreeViewItem)sender; if (!item.IsUnitNode) { if (CarDoubleClicked != null) { CarDoubleClicked(item.DataCar); } } }
/// <summary> /// 选择改变事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void tv_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs <object> e) { SLTreeViewItem item = e.NewValue as SLTreeViewItem; SLCar car = null; if (item != null) { car = item.DataCar; } if (SelectedCarChanged != null) { SelectedCarChanged(car); } }
void InitEvent() { RootTreeViewItem = SLTreeViewItem.CreateRootTreeViewItem(); RootTreeViewItem.CarCountChanged += (x, y) => { if (CarCountChanged != null) { CarCountChanged(RootTreeViewItem.CarCount, RootTreeViewItem.CarOnlineCount); } }; SLTreeViewItem.CheckedCarChanged += SLTreeViewData_CheckedCarChanged; SLTreeViewItem.DoubleClicked += SLTreeViewItem_DoubleClicked; tv.SetBinding(TreeView.ItemsSourceProperty, new Binding("Items")); tv.DataContext = RootTreeViewItem;//数据源设置 tv.SelectedItemChanged += tv_SelectedItemChanged; }
/// <summary> /// 选中改变事件 /// </summary> /// <param name="car"></param> /// <param name="isAdd"></param> void SLTreeViewData_CheckedCarChanged(SLTreeViewItem item, SLCar car, bool isAdd) { if (isAdd) { if (!_checkedCars.ContainsKey(car)) { _checkedCars.Add(car, item); } } else { if (_checkedCars.ContainsKey(car)) { _checkedCars.Remove(car); } } }
/// <summary> /// 选中当前选择的节点 /// </summary> public void CheckedSelectedItem() { if (tv.SelectedItem != null) { SLTreeViewItem item = (SLTreeViewItem)tv.SelectedItem; if (item.IsUnitNode) { return; } foreach (KeyValuePair <SLCar, SLTreeViewItem> keyValuePair in _checkedCars.ToArray()) { if (keyValuePair.Value.Checked) { keyValuePair.Value.Checked = false; } } item.Checked = true; } }
private void FillUnitCars(List <UNIT> units, List <SLCar> cars, SLTreeViewItem treeItem) { try { var tmpunits = units.Where(x => x.PID == treeItem.DataUnit.UNITID).ToList(); if (tmpunits.Any()) {//有下级单位 tmpunits.Sort((a, b) => string.Compare(a.UNITNAME, b.UNITNAME, StringComparison.CurrentCulture)); foreach (var u in tmpunits) { units.Remove(u); int childrenunitcount = units.Count(x => x.PID == u.UNITID); var carlist = cars.Where(x => x.UNITID == u.UNITID).ToList(); //查找该单位下的车辆 int carCount = carlist.Count; if (childrenunitcount == 0 && carCount == 0) { continue; } SLTreeViewItem data = new SLTreeViewItem() { BrowseMode = BrowseMode, DataUnit = u, Text = u.UNITNAME, ParentTreeViewItem = treeItem, CarState = CarState.NoStatus }; FillUnitCars(units, cars, data); //递归寻找下级单位 if (carCount > 0) //有车辆 { carlist.Sort((a, b) => String.Compare(a.LICENSE, b.LICENSE, StringComparison.CurrentCulture)); foreach (SLCar car in carlist) { cars.Remove(car); SLTreeViewItem cardata = new SLTreeViewItem { BrowseMode = BrowseMode, Text = car.LICENSE, ParentTreeViewItem = data, CarState = CarState.OffLine, CarCount = 1 }; cardata.DataCar = car; data.Items.Add(cardata); } } data.CarCount += carCount; data.ExtensionText = string.Format(unitFormatStr, data.CarCount, data.CarOnlineCount); treeItem.CarCount += data.CarCount; if (data.CarCount != 0) { treeItem.Items.Add(data); } //treeItem.ExtensionText = string.Format(unitFormatStr, CarCount, CarOnlineCount); } } } catch (Exception ex) { Console.WriteLine(ex); } }