WPF中在listview进行数据绑定,根据绑定数据调整一列的显示

本文介绍了如何在WPF应用中使用ListView进行数据绑定,并根据绑定的数据对象FtpFileInformation的IsDirectory属性,动态调整列的显示,以展示文件和文件夹的不同图标。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     最近在做WPF项目,对wpf界面的listview进行数据绑定,并根据绑定行的数据属于的类型在listview的一列中用不同的图片进行区分。
好的,现在说一下具体使用步骤:


第一步,先定义要绑定列表需要的集合数据的类
 public class FtpFileInformation
    {


        private bool isDirectory;
        private string filename;
        private string filetime;
        private int filesize;


        public bool IsDirectory
        {
            get { return isDirectory; }
            set
            {
                isDirectory = value;
                this.OnPropertyChanged(IsDirectory.ToString());
            }
        }
        public string Filename
        {
            get { return filename; }
            set
            {
                filename = value;
                this.OnPropertyChanged(Filename);
            }
        }
        public string Filetime
        {
            get { return filetime; }
            set
            {
                filetime = value;
                this.OnPropertyChanged(Filetime);
            }
        }
      
     
        public int Filesize
        {
            get { return filesize; }
            set
            {
                filesize = value;
                this.OnPropertyChanged(Filesize.ToString());//这个一定要有,否则集合变化了,界面不能及时刷新。
            }
        }
        public event PropertyChangedEventHandler PropertyChanged;
        protected virtual void OnPropertyChanged(string propertyName)
        {
            if (this.PropertyChanged != null)
                this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
第二步,定义要绑定的listview
<ListView Name="lvFtpExplorer"  IsSynchronizedWithCurrentItem="True" Grid.Column="1" Grid.Row="2" Visibility="Hidden"  PreviewMouseDoubleClick="lvFtpExplo rer_PreviewMouseDoubleClick" ItemsSource="{Binding}" DataContext="{Binding}">
                      
                        
     <ListView.View>
         <GridView >
             <GridViewColumn Header="文件类型" Width="60" >
                 <GridViewColumn.CellTemplateSelector>
                     <self:ViewListTemplateSelector>
                           <self:ViewListTemplateSelector.FileItemTemplate>
                                <DataTemplate>
                                    <Image Source="/DataDownloader;component/Image/file.png" Width="20" Height="20"></Image> //在列中区分显示的图片
            </DataTemplate>
                            </self:ViewListTemplateSelector.FileItemTemplate>
                            <self:ViewListTemplateSelector.FolderItemTemplate>
                                 <DataTemplate>
                                      <Image Source="/DataDownloader;component/Image/Folder.png" Width="20" Height="20"></Image>//在列中区分显示的图片
  </DataTemplate> 
   </self:ViewListTemplateSelector.FolderItemTemplate>
</self:ViewListTemplateSelector>
</GridViewColumn.CellTemplateSelector> 
</GridViewColumn> 
<GridViewColumn Header="文件名" Width="80" DisplayMemberBinding="{Binding Path=Filename}"> 
</GridViewColumn> <GridViewColumn Header="文件大小" Width="80" DisplayMemberBinding="{Binding Path=Filesize}" > 
</GridViewColumn> <GridViewColumn Header="最近修改时间" Width="120" DisplayMemberBinding="{Binding Path=Filetime}">
</GridViewColumn> 
 </GridView>
</ListView.View> 
<ListView.ContextMenu> 
<ContextMenu> 
<MenuItem Header="下载" Click="AddDownload_Click"/> 
<MenuItem Header="复制" />
<MenuItem Header="清除" /> 
</ContextMenu> 
</ListView.ContextMenu> 
</ListView>


第三步,在c#后台代码中绑定listview的源ObservableCollection<FtpFileInformation> ftpFileInformationn集合中 

private ObservableCollection<FtpFileInformation> ftpFileInformation;//用于绑定ftp浏览文件目录和文件 

ftpFileInformation=new ObservableCollection<FtpFileInformation>(); 

vFtpExplorer.ItemsSource = ftpFileInformation; 


第四步,在后台代码中实现列属性区分显示的类

 //区分显示文件和文件夹的图标类      

public class ViewListTemplateSelector : DataTemplateSelector     {                

 public DataTemplate FileItemTemplate { get; set; }                

 public DataTemplate FolderItemTemplate { get; set; }             

public override DataTemplate SelectTemplate(object item, DependencyObject container) 

   {            

 FtpFileInformation data = item as FtpFileInformation;             

return (data != null && data.IsDirectory ==true) ? FolderItemTemplate : FileItemTemplate;      

   }     

第五步,现在就可以在listview 的<GridViewColumn Header="文件类型"  >的列中

 根据绑定数据的FtpFileInformation 的IsDirectory 属性是TRUE和FALSE来在listview

 的“文件类型”的列中不同行显示不同的图片。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值