【问题标题】:Master/Detail DataGrid. How to access Detail DataGrid to set ItemsSource?主/详细数据网格。如何访问 Detail DataGrid 来设置 ItemsSource?
【发布时间】:2011-11-08 07:38:04
【问题描述】:

在典型的 Master/Detail 情况下...

我有一个数据网格。此 DataGrid 的 ItemsSource 在 WCF 调用的 Completed 事件中设置 - (grdMaster.ItemsSource = e.Result) - 其中网格的 x:Name 是 grdMaster。这都是 100%。

但是,当在主网格 DataTemplate 中添加详细数据网格并对其进行适当命名时...我的代码隐藏无法识别详细信息网格。说白了,我不能像使用 grdMaster 那样设置 grdDetail 的 ItemsSource。

根据所选的主项目,我需要进行 WCF 调用以获取适当的详细信息。

【问题讨论】:

    标签: xaml silverlight datagrid master-detail


    【解决方案1】:

    根据通知您选择项目进行扩展的方式,您需要找到用户所在的行:

    DataGridRow row = DataGridRow.GetRowContainingElement(...);
    

    并更新行详细信息可见性:

    row.DetailsVisibility = Visibility.Visible;
    

    除了这些细节之外,您还需要为细节行创建一个样式——它连接到一个您可以收听的事件:

    <DataTemplate x:Key="DetailsRowTemplate">
        <StackPanel>
            <Border BorderBrush="{StaticResource BlackBrush}" BorderThickness="0,2,0,0" Padding="0" >
                <data:DataGrid ItemsSource="{Binding DummyResultsView}" AutoGenerateColumns="False"
                                LoadingRow="DataGrid_LoadingRow" 
                                CanUserResizeColumns="False" 
                                CanUserReorderColumns="False"
                                HeadersVisibility="None"
                                IsReadOnly="True">
                </data:DataGrid>
            </Border>
        </StackPanel>
    </DataTemplate>
    

    设置为网格的 RowDetailsTemplate:

    在 LoadingRow 事件中,您可以获得涉及数据上下文的引用,并保存对子数据网格的引用,以便在 WCF 调用之后您可以设置 ItemsSource:

    private void DataGrid_LoadingRowDetails(object sender, DataGridRowDetailsEventArgs e)
    {
        List<DataGrid> detailElements = e.DetailsElement.GetChildrenByType<System.Windows.Controls.DataGrid>().ToList();
    
        var itemSelected = e.Row.DataContext;
    
        if (detailElements.Count > 0)
        {
            DataGrid detailsDataGrid = detailElements[0];
    
            // save a reference so the ItemsSource can be set later....
            this.DataGrid = detailsDataGrid;
    
            this.Model.InitializeDetailsList(detailsDataGrid, itemSelected);
        }
    }
    

    希望对你有帮助,

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-08
      • 1970-01-01
      • 2013-03-07
      • 2011-04-06
      • 2019-05-09
      • 1970-01-01
      • 2011-03-28
      • 2020-07-03
      相关资源
      最近更新 更多