This question is locked. New answers and comments are not allowed.
Hi,
I try to make a simple explorer. I want to show folders and files in a list and if item is not file, it will be expandable. I want to load expanding folder content from wcf service on demand .
I can fetch data from service when folder expanded but can not show data under the related folder.
Please tell me, what's wrong with my code.
Here is the Page Code :
Here is the extended service response class
And Here is the xaml code
Thanks
I try to make a simple explorer. I want to show folders and files in a list and if item is not file, it will be expandable. I want to load expanding folder content from wcf service on demand .
I can fetch data from service when folder expanded but can not show data under the related folder.
Please tell me, what's wrong with my code.
Here is the Page Code :
public WebdiscPage() { InitializeComponent(); this.Loaded += WebdiscPage_Loaded; this.Unloaded += WebdiscPage_Unloaded; } void WebdiscPage_Loaded(object sender, RoutedEventArgs e) { WebDiscService.WebDiscClient client = new WebDiscService.WebDiscClient(); client.ListItemsInWebdiskFolderCompleted += client_ListItemsInWebdiskFolderCompleted; client.ListItemsInWebdiskFolderAsync(this.SessioID, this.UserID, "/", "Name", true); } void client_ListItemsInWebdiskFolderCompleted(object sender, WebDiscService.ListItemsInWebdiskFolderCompletedEventArgs e) { if (!e.Result.IsValid) return; ObservableCollection<WebdiskItemExtend> myList = new ObservableCollection<WebdiskItemExtend>(); foreach (var item in e.Result.ListOfItemsInFolder) { myList.Add(new WebdiskItemExtend(item.IsFile, item.IsItemUserDefined, item.WebdiskItemDate, item.WebdiskItemName, item.WebdiskItemPath, item.WebdiskItemSize)); } tlvWebdisc.ItemsSource = myList; } WebdiskItemExtend rowWebDiscItem; Telerik.Windows.Controls.GridView.GridViewRowItem row; private void tlvWebdisc_RowIsExpandedChanging(object sender, Telerik.Windows.Controls.GridView.RowCancelEventArgs e) { if (e.Row.DataContext != null) { row = e.Row; rowWebDiscItem = (WebdiskItemExtend)e.Row.DataContext; if (!rowWebDiscItem.IsExpanded && !rowWebDiscItem.IsFile) { WebDiscService.WebDiscClient client = new WebDiscService.WebDiscClient(); client.ListItemsInWebdiskFolderCompleted += client_ListItemsInWebdiskFolderCompleted2; client.ListItemsInWebdiskFolderAsync(this.SessioID, this.UserID, rowWebDiscItem.WebdiskItemPath, "Name", true); } } } void client_ListItemsInWebdiskFolderCompleted2(object sender, WebDiscService.ListItemsInWebdiskFolderCompletedEventArgs e) { if (!e.Result.IsValid) return; ObservableCollection<WebdiskItemExtend> myList = new ObservableCollection<WebdiskItemExtend>(); foreach (var item in e.Result.ListOfItemsInFolder) { myList.Add(new WebdiskItemExtend(item.IsFile, item.IsItemUserDefined, item.WebdiskItemDate, item.WebdiskItemName, item.WebdiskItemPath, item.WebdiskItemSize)); } rowWebDiscItem.WebdiskItemList = myList; rowWebDiscItem.IsExpanded = true; }}Here is the extended service response class
public class WebdiskItemExtend : WebDiscService.WebdiskItem , INotifyPropertyChanged{ public event PropertyChangedEventHandler PropertyChanged; private bool isExpanded; public bool IsExpanded { get { return this.isExpanded; } set { if (value != this.isExpanded) { this.isExpanded = value; this.OnPropertyChanged("IsExpanded"); } } } protected virtual void OnPropertyChanged(PropertyChangedEventArgs args) { PropertyChangedEventHandler handler = this.PropertyChanged; if (handler != null) { handler(this, args); } } private void OnPropertyChanged(string propertyName) { this.OnPropertyChanged(new PropertyChangedEventArgs(propertyName)); } public ObservableCollection<WebdiskItemExtend> WebdiskItemList { get; set; } public WebdiskItemExtend() { } public WebdiskItemExtend(bool isFile, bool isItemUserDefined, DateTime webdiskItemDate, string webdiskItemName, string webdiskItemPath, string webdiskItemSize) { IsExpanded = false; IsFile = isFile; IsItemUserDefined = isItemUserDefined; WebdiskItemDate = webdiskItemDate; WebdiskItemName = webdiskItemName; WebdiskItemPath = webdiskItemPath; WebdiskItemSize = webdiskItemSize; WebdiskItemList = new ObservableCollection<WebdiskItemExtend>(); }}And Here is the xaml code
<Grid Grid.Row="2" Grid.Column="2"> <Grid.Resources> <telerik:InvertedBooleanConverter x:Key="c" /> </Grid.Resources> <telerik:RadTreeListView x:Name="tlvWebdisc" telerik:StyleManager.Theme="Windows8" IsExpandedBinding="{Binding IsExpanded, Mode=TwoWay}" IsExpandableBinding="{Binding IsFile, Converter={StaticResource c}}" AutoGenerateColumns="False" ShowColumnHeaders="False" MinHeight="386" ColumnWidth="*" CanUserFreezeColumns="False" IsReadOnly="True" RowIndicatorVisibility="Collapsed" RowIsExpandedChanging="tlvWebdisc_RowIsExpandedChanging" > <telerik:RadTreeListView.ChildTableDefinitions> <telerik:TreeListViewTableDefinition ItemsSource="{Binding WebdiskItemList}" /> </telerik:RadTreeListView.ChildTableDefinitions> <telerik:RadTreeListView.Columns> <telerik:GridViewDataColumn DataMemberBinding="{Binding WebdiskItemName}" IsReadOnly="True" Width="*" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding WebdiskItemDate}" IsReadOnly="True" Width="150" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding WebdiskItemSize}" IsReadOnly="True" Width="150" /> </telerik:RadTreeListView.Columns> </telerik:RadTreeListView> </Grid>Thanks