開發一個WPF桌面應用程序。剛接觸WPF編程以及C#語言,這里把一些關鍵的問題記錄下來。
下面是實現將路徑的文件夾信息綁定到TreeView及DataGrid上顯示。
關鍵問題是C#數據綁定方式及IEnumerable接口實現對文件類型數據的集合訪問,這里數據綁定使用的ItemSource方法,相關詳細內容可以搜索關鍵字查詢。
參考效果
C#代碼:
//加載FolderPath目錄下的文件夾及文件信息 private void Directory_load() { var directory = new ObservableCollection<DirectoryRecord>(); directory.Add( new DirectoryRecord { Info = new DirectoryInfo(FolderPath) } ); directoryTreeView.ItemsSource = directory; }
//DataGrid事件,設置列標
fileInfo.AutoGeneratingColumn += fileInfoColumn_Load;
private void fileInfoColumn_Load(object sender, DataGridAutoGeneratingColumnEventArgs e) { List<string> requiredProperties = new List<string> { "Name", "Length", "FullName", "LastWriteTime" }; if (!requiredProperties.Contains(e.PropertyName)) { e.Cancel = true; } else { e.Column.Header = e.Column.Header.ToString(); } }
//利用IEnumerable接口實現對FileInfo及其屬性GetDirectories的調用 class DirectoryRecord { public DirectoryInfo Info { get; set; } public IEnumerable<FileInfo> Files { get { return Info.GetFiles(); } } public IEnumerable<DirectoryRecord> Directories { get { return from di in Info.GetDirectories("*", SearchOption.TopDirectoryOnly) select new DirectoryRecord { Info = di }; } } }
其中from A in B select C 是將B集合中A對象的屬性C作為一組集合進行返回。
xaml代碼:TreeView控件與DataGrid控件利用ItemSource綁定方式綁定相應數據。
<TreeView x:Name="directoryTreeView"> <TreeView.Resources> <HierarchicalDataTemplate DataType="{x:Type local:DirectoryRecord}" ItemsSource="{Binding Directories}" > <StackPanel Orientation="Horizontal"> <TextBlock Text="{Binding Info.Name}"/> </StackPanel> </HierarchicalDataTemplate> </TreeView.Resources> </TreeView> <DataGrid x:Name="fileInfo" ItemsSource="{Binding SelectedItem.Files, ElementName=directoryTreeView}">