Silverlight中使用MVVM方式进行datagrid的内嵌combobox方法

以前都使用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");
        }
    }


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值