RadTreeView按需加载
XML:
.....
LoadOnDemand="ExplorerTreeView_LoadOnDemand"
>
后台代码:
private void ExplorerTreeView_LoadOnDemand(object sender, Telerik.Windows.RadRoutedEventArgs e)
{
RadTreeViewItem item = e.OriginalSource as RadTreeViewItem;
if (item.Item is VoyageVO)
{
var voyage = item.Item as VoyageVO;
ObservableCollection<LegVO> Legs = new ObservableCollection<LegVO>();
if (item != null && item.Items.Count < 1)
{
Task.Factory.StartNew(() =>
{
Legs = _IndoorSampleCheckHttpProxy.GetLegsByVoyageID(voyage.ID);
if (Legs == null) return;
//voyage.Legs.AddRange(Legs);
Application.Current.Dispatcher.Invoke(new Action(delegate()
{
item.ItemsSource = Legs;
}));
})
.ContinueWith((t) =>
{
Application.Current.Dispatcher.Invoke(new Action(delegate()
{
if (Legs.Count == 0)
item.IsLoadOnDemandEnabled = false;
else
item.IsLoadingOnDemand = false;
}));
});
}
}
else if (item.Item is LegVO)
{
var leg = item.Item as LegVO;
ObservableCollection<StationVO> Stations = new ObservableCollection<StationVO>();
if (item != null && item.Items.Count < 1)
{
StationQueryInformation stationQueryInformation = new StationQueryInformation();
stationQueryInformation.LegID = leg.ID;
Task.Factory.StartNew(() =>
{
Stations = _IndoorSampleCheckHttpProxy.GetStationsByLeg(stationQueryInformation);
//leg.Stations.AddRange(Stations);
Application.Current.Dispatcher.Invoke(new Action(delegate()
{
item.ItemsSource = Stations;
}));
})
.ContinueWith((t) =>
{
item.Dispatcher.Invoke(new Action(delegate()
{
if (Stations.Count == 0)
item.IsLoadOnDemandEnabled = false;
else
item.IsLoadingOnDemand = false;
}));
});
}
}
}
标记部分为:两种操作都能达到目的,前一种会造成TreeViewItem“多选”,显示效果较差。