【问题标题】:Telerik Radgrid WPFTelerik Radgrid WPF
【发布时间】:2011-01-07 06:05:09
【问题描述】:

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

谢谢

【问题讨论】:

    标签: wpf xaml gridview telerik selecteditem


    【解决方案1】:

    这是一个例子:

    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;
            }
        }
    }
    

    【讨论】:

    • 感谢弗拉德,但 Loaded 事件仅在第一次加载网格时触发,因此第一次单击 (+) 号会调用 RadGridView_Loaded,随后单击同一行不会调用该事件.是否有其他事件需要与父网格或子网格相关联?
    【解决方案2】:

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

        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;
        }
    

    【讨论】:

    • 谢谢弗拉德。逻辑看起来确实可以解决问题。但似乎 IsExpandedChanged 事件不适用于 parentRow。是否已将其添加到更高版本的 Telerik?
    • 确实在 2009 年第三季度 SP1 中添加了此事件 - 更多信息请点击此处:telerik.com/products/wpf/whats-new/release-history/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-28
    • 1970-01-01
    相关资源
    最近更新 更多