2010-01-20 150 views
1

我的WPF页面具有Telerik提供的RadGrid控件。网格是一个嵌套网格,基本上意味着单击该行最左列上的(+)号将该行扩展为一个子网格。这是通过在我的XAML中指定分层网格来完成的。当您单击行并展开子网格时,一切正常,但最初选定行的selectedItem似乎没有改变。一个例子是最初选择网格的第1行,然后展开第4行以显示子网格。显示子网格,但selectedItem仍然是第1行。所需行为是第4行是selectedItem,一旦它展开显示子网格。任何人都可以指出这里究竟发生了什么问题。Telerik Radgrid WPF

感谢

回答

1

你是对的 - 这里是更新版本:

private void RadGridView_Loaded(object sender, RoutedEventArgs e) 
    { 
     var childGrid = (RadGridView)sender; 
     var parentRow = childGrid.ParentRow; 

     if (parentRow != null) 
     { 
      RadGridView1.SelectedItem = childGrid.DataContext; 
      parentRow.IsExpandedChanged += new RoutedEventHandler(parentRow_IsExpandedChanged); 
     } 
    } 

    void parentRow_IsExpandedChanged(object sender, RoutedEventArgs e) 
    { 
     RadGridView1.SelectedItem = ((GridViewRow)sender).DataContext; 
    } 
+0

谢谢弗拉德。逻辑确实看起来像是能够解决问题的东西。但似乎IsExpandedChanged事件不可用于parentRow。它是否已添加到Telerik的更高版本? – 2010-01-22 14:45:04

+0

事实上,此活动已于2009年第3季度增加 - 更多信息,请访问:http://www.telerik.com/products/wpf/whats-new/release-history/q3-2009-sp1-version-2009-3-1208 -183011105.aspx – 2010-01-25 08:26:08

+0

谢谢弗拉德。这有助于。 – 2010-01-25 15:23:34

0

下面是一个例子:

XAML

<Window x:Class="WpfApplication1.Window1" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"  
Title="Window1"> 
<Grid> 
    <telerik:RadGridView x:Name="RadGridView1" ItemsSource="{Binding}"> 
     <telerik:RadGridView.ChildTableDefinitions> 
      <telerik:GridViewTableDefinition /> 
     </telerik:RadGridView.ChildTableDefinitions> 
     <telerik:RadGridView.HierarchyChildTemplate> 
      <DataTemplate> 
       <telerik:RadGridView ItemsSource="{Binding Items}" Loaded="RadGridView_Loaded" /> 
      </DataTemplate> 
     </telerik:RadGridView.HierarchyChildTemplate> 
    </telerik:RadGridView> 
</Grid> 

C#

using System.Windows; 
using System.Linq; 

namespace WpfApplication1 
{ 
    public partial class Window1 : Window 
    { 
     public Window1() 
     { 
      InitializeComponent(); 

      DataContext = from i in Enumerable.Range(0, 10) 
          select new 
          { 
           ID = i, 
           Items = from j in Enumerable.Range(0, 10) 
             select new 
             { 
              ID = j, 
             } 
          }; 
     } 

     private void RadGridView_Loaded(object sender, RoutedEventArgs e) 
     { 
      RadGridView1.SelectedItem = ((FrameworkElement)sender).DataContext; 
     } 
    } 
} 
+0

感谢弗拉德,但Loaded事件触发仅在第一次网格装上首次的(+)符号,使单击调用RadGridView_Loaded,在同一行,随后单击不调用事件。是否有其他事件需要与父网格或子网格关联? – 2010-01-21 19:09:42