【问题标题】:Get the rows selectable for telerik radgidview获取可供 Telerik radgidview 选择的行
【发布时间】:2016-07-05 15:02:04
【问题描述】:

我有一个 Telerik:RadGridView。听说By default the row selection is disabled ( AllowRowSelect is False ).

两个问题:

  1. 现在在我的 ViewModel 类中,如果满足条件说如果 count>0,如何启用它?
  2. 我想选择一行并引发一个事件以启用视图中的按钮。怎么样?

【问题讨论】:

  • 您发布的链接是针对 ASP.net 的。在 WPF 中,默认情况下启用选择。但是可以改变选择方式(单行、多行)
  • @unkreativ,对不起。我删除了 wpf 标签。
  • 我仍然对您使用的是 XAML 还是 ASP.NET AJAX 感到困惑?您删除了 WPF 标记,但仍有 XAML 和 Silverlight。您能否确认您使用的是 ASP.NET AJAX 或 XAML?
  • @LanceMcCarthy,忘记 asp.net ajax。只是纯粹的xaml。链接可能有误。我找不到行选择的属性。

标签: xaml telerik


【解决方案1】:

Here's the documentation for Selection(WPF 或 Silverlight 相同)。

也可以进行程序化选择,有several examples here

更具体地说,您可以使用实际项目来执行选择,而不是行。例如,假设您有一个模型Car,而您的视图模型有ObervableCollection<Car> Cars

您已将 GridView 绑定到该集合:

<telerik:GridView ItemsSource="{Binding Cars}"/>

这意味着您现在可以通过编程方式使用其中一个项目进行选择(比如单击按钮),就像选择第一个项目一样:

MyGridView.SelectedItems.Add(viewmodel.Cars[0]);

要回答有关基于表达式或视图模型属性启用和禁用选择的问题,您可以使用转换器,因为SelectionMode 是一个枚举。

假设您有一个名为 CanSelect 的视图模型属性

public CanSelect
{
   get
   {
      return canSelect;
   }
   set
   {
      if(value==canSelect)return;
      canSelect=value;
      OnPropertyChanged();
   }
}

接下来,您创建一个转换器:

public class MySelectionModeConverter
{
   public Convert(object value...)
   {
       //pick the selection mode that makes the most sense for you
       return (bool)value ? SelectionMode.Single : SelectionMode.None
   }
}

现在您可以绑定到该视图模型属性,如下所示:

&lt;telerik:GridView SelectionMode="{Binding CanSelect, Converter={StaticResource MySelectionModeConverter}}" /&gt;

最后,您声明您想要一个 RowClick 事件。默认情况下,这在 GridView 中不可用,通常您会使用SelectionChanged。您需要在 GridViewRow 上添加自己的 MouseDown 事件。

这是一个例子:

this.AddHandler(GridViewRow.MouseLeftButtonDownEvent,
             new MouseButtonEventHandler(OnMouseLeftDown), true);

public void OnMouseLeftDown(object sender, MouseButtonEventArgs e)        
 {         }

【讨论】:

  • 选择一行时我需要一个事件。我们可以将属性添加到 RadGridView 吗? SelectionChanged="RadGridView_RowLoaded"。那么在代码后面实现方法呢?
  • SelectionChanging 或 SelectionChanged 可能是您想要的,请参阅此处docs.telerik.com/devtools/wpf/controls/radgridview/events/…
  • 不确定为什么 SelectionChanged 事件不起作用。但我注意到 SelectionChanged 只会在所选项目实际更改时触发。我想要的是通过单击该行然后引发一个事件。
  • 我添加了您想要添加事件处理程序到GridViewRow 的代码。请注意,如果您想双击,请在此处查看示例应用程序 telerik.com/forums/single-click-event-on-gridview-row
  • 问题是当我单击任何行时,它会反复引发事件。说 12 次它到达事件代码。不知道为什么。
【解决方案2】:

通过http://www.telerik.com/forums/radgridview---click-event获取解决方案

  private void RadGridView_RowLoaded(object sender, Telerik.Windows.Controls.GridView.RowLoadedEventArgs e)
  {
      var row = e.Row as GridViewRow;
      if (row != null)
      {
          row.AddHandler(GridViewRow.MouseLeftButtonDownEvent,
       new MouseButtonEventHandler(GridViewRow_MouseLeftButtonDown), true);
      }
  }

  private void GridViewRow_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
  {
      MessageBox.Show("Hi");
  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-02
    • 1970-01-01
    • 2018-02-15
    • 2012-01-13
    • 1970-01-01
    • 1970-01-01
    • 2013-12-03
    • 1970-01-01
    相关资源
    最近更新 更多