请选择 进入手机版 | 继续访问电脑版

Aic-tech BBS

 找回密码
 立即注册

扫一扫,访问微社区

搜索
查看: 747|回复: 0

Telerik控件使用随笔之RadGridView

[复制链接]

15

主题

25

帖子

431

积分

超级版主

Rank: 8Rank: 8

积分
431
发表于 2017-5-11 09:14:23 | 显示全部楼层 |阅读模式
本帖最后由 wangjie 于 2017-5-11 09:15 编辑

Telerik控件使用随笔之RadGridView

控件基本使用规则参见链接:Telerik UI for WPF: RadGridView Overview
本帖仅分享常规文档中并未提及的各种灵活需求如何实现,链接中官网教程中内容不再赘述~

问题一:在RadGridView控件中使用GridViewComboBoxColumn时可以发现,对GridViewComboBoxColumn的数据绑定应用UpdateSourceTrigger = PropertyChanged并无效果,其值只有在combobox本身失去焦点时才会更新。
解决方法:据Telerik官方论坛回复——“RadGridView will update the bound property only when the edit operation for the specific cell is successfully completed, not when the editor element in the cell raises a DependencyPropertyChanged event notification.” RadGridView控件本身设计如此。此问题可按如下方式解决
  1. public class RadGridViewHelper
  2.     {
  3.         #region GetUpdateComboBoxSourceOnPropertyChange
  4.         public static bool GetUpdateComboBoxSourceOnPropertyChange(DependencyObject obj)
  5.         {
  6.             return (bool)obj.GetValue(UpdateComboBoxSourceOnPropertyChangeProperty);
  7.         }
  8.         public static void SetUpdateComboBoxSourceOnPropertyChange(DependencyObject obj, bool value)
  9.         {
  10.             obj.SetValue(UpdateComboBoxSourceOnPropertyChangeProperty, value);
  11.         }

  12.         /// <summary>        
  13.         /// Enables the behavior when selecting an item in any GridViewComboBoxColumn immediately changes the bound property        
  14.         /// </summary>        
  15.         public static readonly DependencyProperty UpdateComboBoxSourceOnPropertyChangeProperty = DependencyProperty.RegisterAttached("UpdateComboBoxSourceOnPropertyChange",typeof(bool),typeof(RadGridViewHelper),new FrameworkPropertyMetadata(false, UpdateComboBoxSourceOnPropertyChangeChanged));
  16.         private static void UpdateComboBoxSourceOnPropertyChangeChanged(DependencyObject d,DependencyPropertyChangedEventArgs e)
  17.         {
  18.             var grid = d as RadGridView;
  19.             if (grid == null)
  20.             {
  21.                 return;
  22.             }
  23.             if ((bool)e.NewValue)
  24.             {
  25.                 grid.AddHandler(RadComboBox.SelectionChangedEvent, new SelectionChangedEventHandler(ComboBoxSelectionChanged));
  26.             }
  27.         }
  28.         private static void ComboBoxSelectionChanged(object sender, SelectionChangedEventArgs e)
  29.         {
  30.             var cb = e.OriginalSource as RadComboBox;
  31.             var cell = (e.OriginalSource as RadComboBox).ParentOfType<GridViewCell>();
  32.             if (cell != null)
  33.             {
  34.                 cell.Value = cb.SelectedItem;
  35.                 cell.DataColumn.UpdateSourceWithEditorValue(cell);
  36.             }
  37.         }
  38.         #endregion
  39.     }
复制代码
通过自定义一个RadGridViewHelper类,来自行处理RadComboBox的SelectionChanged事件……并在xaml上作如下应用即可
  1. <telerik:RadGridView ……
  2.                                              RadGridViewHelper.UpdateComboBoxSourceOnPropertyChange="true">
复制代码









决策远比执行要难得多……
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|Beijing Advanced Information and Control Co. Ltd.

GMT+8, 2019-10-15 10:18 , Processed in 0.083555 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表