以前都使用RadGridView控件,里面有自带的GridComboBoxColumn,可以很容易实现datagrid中嵌入comboBox,而最近试验了系统的datagrid发现内嵌comboBox还是出现了很多问题,查了大量资料终于实现,特记录在此。本例使用的模式是Prism+MVVM+RIA的架构,简单贴出关键代码。
一、datagrid中添加模版列,并加入ComboBox,设置comboBox属性,
<sdk:DataGrid Margin="2" AutoGenerateColumns="False" ItemsSource="{Binding PageView}"> <sdk:DataGrid.Columns> <sdk:DataGridTextColumn Header="登录账号" Binding="{Binding SACCOUNTCODE}" Width="120" /> <sdk:DataGridTextColumn Header="用户姓名" Binding="{Binding SUSERNAME}" Width="120" /> <sdk:DataGridTemplateColumn Header="所属单位" Width="200"> <sdk:DataGridTemplateColumn.CellTemplate> <DataTemplate> <ComboBox x:Name="companycode" ItemsSource="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType= telerik:radwindow},Path=DataContext.GroupList }" displayMemberPath="SGROUPNAME" SelectedValuePath="SGROUPID" SelectedValue="{Binding SCOMPANYCODE}" ></ComboBox> </DataTemplate> </sdk:DataGridTemplateColumn.CellTemplate> </sdk:DataGridTemplateColumn> </sdk:DataGrid.Columns> </sdk:DataGrid>
注意:重点是ComboBox中的itemdatasource的绑定设置,由于需要寻找此window对应的datacontext,所以需要使用RelativeSource,同时注意 path中要使用DataContext.GroupList 而非直接使用GroupList,另外不要忘了指定SelectedValue的绑定属性,此属性是datagrid中对应的列所要取的值。
2、datagrid及comboBox所需绑定的列表,数据可在viewmodel中的方法或事件中加载PagedCollectionView pageview; public PagedCollectionView PageView { get { return pageview; } set { pageview = value; RaisePropertyChanged("PageView"); } } ObservableCollection<T_SYS_USER> userinfoList = new ObservableCollection<T_SYS_USER>(); public ObservableCollection<T_SYS_USER> UserInfoList { get { return userinfoList; } set { userinfoList = value; RaisePropertyChanged("UserInfoList"); } } ObservableCollection<T_SYS_GROUP> groupList = new ObservableCollection<T_SYS_GROUP>(); public ObservableCollection<T_SYS_GROUP> GroupList { get { return groupList; } set { groupList = value; RaisePropertyChanged("GroupList"); } }3、datagrid的shell为radwindow,此处直接指定viewmodel,这里 使用了prism的注入
public partial class UserManagerView : radwindow,IView { public UserManagerView() { InitializeComponent(); this.DataContext = ServiceLocator.Current.GetInstance<Iviewmodel>("UserManageviewmodel"); } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。