【WPF】【DevExpress】定制TreeListControl中显示列的样式+MVVM架构

本文介绍了如何在WPF应用中使用DevExpress的TreeListControl,详细展示了如何定制某一列的样式,特别是实现ComboxEdit列,并结合MVVM架构进行操作。同时,文章还提及了快速更换DevExpress主题样式的步骤,以及通过代码或界面配置改变TreeListControl列样式的方法。
最近总想写点什么,但是又不知道具体该写什么,终日昏昏噩噩。无意中在论坛看见一哥们发的帖子,速倒腾之,现把成果分享一下。
=============开发环境=============
系统: Win7sp1 32位
IDE: Microsoft VisualStudio 2013 Ultimate Update 1
工程: .Net Framework4.5.1
控件: DevExpress 13.2.5
================================


程序实现了DevExpress在WPF下快捷更换主题样式以及TreeListControl定制某列样式,具体什么样子看图便知:



一、快速更换主题样式
很简单,只需要两步,已经分别在图表标明了①和②,如图所示:


之前发布的作废,这是从老外的源码转换过来,并进行了扩展: 1>添加了水平和垂直网格线 2>添加了MVVM 3>添加了UI虚拟化的支持 4>支持自动填充和最小宽度 5>可绑定到Datatable,从而进行编辑操作 6>可装载海量数据,单层数据超过1W,瞬间完成,50W数据的滚动不卡顿 7>集成到ComboBox中 8>有两个主题,一个有类似传统的有折叠连接线的主题,另一个是当下的。 个人比较喜欢有折叠连接线的,结构可以更清晰。 特别强调一点:在海量数据的情况下,如果虚拟化UI开启,在展开大量数据的情况下,执行滚动操作可能导致程序假死,原因不明,希望有人能找到原因,并能告知!另外对于系统自带的TreeView测试发现,如果展开第二层,该层数据量很大,拖放也很卡,但DataGrid却非常顺滑,怀疑微软对层次结构的UI虚拟化仍没做好。 另外就个人感觉在目前的电脑配置下,UI虚拟化可以显著提高数据的加载速度,但一旦数据已加载后,执行拖放操作时,顺滑程度远不于非虚拟化的情况,原因也很简单,只要内存还够用,UI已加载的拖放肯定比UI虚拟的拖放好。 这次针对之前的发布主要在于完全取消了虚拟化,因为虚拟化会导致在大数据下滚动的卡死,垂直网格线不随滚动条滚动等各种意外的问题。 另外与树有关的: WPF TreeView的横向排布风格20170722(带动画) http://download.youkuaiyun.com/detail/maiker/9907400 Email: wuyang26@live.cn
WPF DevExpress GridControl使用MVVM模式实现`RowCellClick`,可以借助`dxmvvm:EventToCommand`来绑定事件到ViewModel中的命令。以下是具体实现步骤与示例代码: #### 1. 创建ViewModel ```csharp using DevExpress.Mvvm; using System.Collections.ObjectModel; public class MainViewModel : ViewModelBase { public ObservableCollection<DataItem> DataItems { get; set; } public MainViewModel() { DataItems = new ObservableCollection<DataItem> { new DataItem { Name = "Item1", Value = 10 }, new DataItem { Name = "Item2", Value = 20 } }; } public DelegateCommand<RowCellClickEventArgs> RowCellClickCommand => new DelegateCommand<RowCellClickEventArgs>(OnRowCellClick); private void OnRowCellClick(RowCellClickEventArgs e) { // 处理行单元格点击的逻辑 // 可以通过e.Row和e.Column获取行和信息 } } public class DataItem { public string Name { get; set; } public int Value { get; set; } } ``` #### 2. 在XAML中绑定GridControl ```xml <Window x:Class="WpfApp1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid" xmlns:dxmvvm="http://schemas.devexpress.com/winfx/2008/xaml/mvvm" Title="MainWindow" Height="450" Width="800"> <Window.DataContext> <local:MainViewModel/> </Window.DataContext> <Grid> <dxg:GridControl ItemsSource="{Binding DataItems}"> <dxg:GridControl.View> <dxg:TableView ShowTotalSummary="True"/> </dxg:GridControl.View> <dxg:GridControl.Columns> <dxg:GridColumn FieldName="Name"/> <dxg:GridColumn FieldName="Value"/> </dxg:GridControl.Columns> <dxmvvm:Interaction.Behaviors> <dxmvvm:EventToCommand EventName="RowCellClick" Command="{Binding RowCellClickCommand}" PassEventArgsToCommand="True"/> </dxmvvm:Interaction.Behaviors> </dxg:GridControl> </Grid> </Window> ``` ### 解释 - **ViewModel**:在ViewModel里,`DataItems`为GridControl的数据源,`RowCellClickCommand`是处理`RowCellClick`事件的命令。当行单元格被点击时,`OnRowCellClick`方法会被调用。 - **XAML**:通过`ItemsSource`属性把GridControl的数据源绑定到ViewModel的`DataItems`属性。利用`dxmvvm:EventToCommand`将`RowCellClick`事件绑定到ViewModel的`RowCellClickCommand`,并通过`PassEventArgsToCommand="True"`把事件参数传递给命令。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值