1

私の WPF ページには、Telerik が提供する RadGrid コントロールがあります。グリッドはネストされたグリッドであり、行の左端の列にある (+) 記号をクリックすると、行がサブグリッドに展開されます。これは、私の XAML で階層グリッドを指定することによって行われています。行をクリックしてサブグリッドを展開すると、すべてが正常に機能しますが、最初に選択された行の selectedItem は変更されていないようです。たとえば、最初にグリッドの行 1 を選択し、次に行 4 を展開してサブグリッドを表示します。サブグリッドが表示されますが、selectedItem はまだ行 1 です。目的の動作は、行 4 が展開されてサブグリッドが表示されると、selectedItem になることです。ここで何が間違っているのか、誰でも指摘できますか。

ありがとう

4

2 に答える 2

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;
    }
于 2010-01-22T08:39:21.237 に答える
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;
        }
    }
}
于 2010-01-21T10:29:32.680 に答える