【问题标题】:Microsoft.Toolkit.Uwp.UI.DataGrid - how to get cell value from button click on the cellMicrosoft.Toolkit.Uwp.UI.DataGrid - 如何通过单击单元格的按钮获取单元格值
【发布时间】:2020-06-30 18:44:48
【问题描述】:

使用Microsoft.Graph,我正在填充UWP Tookit DataGrid,如下所示。

问题:如何在单元格上的按钮单击事件时获取所选单元格的值?

填充网格的代码

using Microsoft.Graph
..........

// Get the events
        IUserEventsCollectionPage events = await graphClient.Me.Events.Request()
            .Select("subject,organizer,start,end")
            .OrderBy("createdDateTime DESC")
            .GetAsync();

MainPage.Xaml 与 DataGrid

<Page
        ....>

    <Grid>
        <controls:DataGrid x:Name="EventList" Grid.Row="1" AutoGenerateColumns="False">
            <controls:DataGrid.Columns>
                <controls:DataGridTextColumn Header="Organizer" Width="SizeToCells" Binding="{Binding Organizer.EmailAddress.Name}" FontSize="20" />
                <controls:DataGridTemplateColumn Header="Subject">
                    <controls:DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <HyperlinkButton x:Name="hlBtnFileDownload" Content="{Binding subject}" Click="hlBtnFileDownload_Click"></HyperlinkButton>
                        </DataTemplate>
                    </controls:DataGridTemplateColumn.CellTemplate>
                </controls:DataGridTemplateColumn>
                ..................
                ..................
            </controls:DataGrid.Columns>
        </controls:DataGrid>
    </Grid>
</Page>

按钮点击事件

我虽然代码应该类似于以下内容(因为我在WPF datagrid 中使用过它)。但是这里我不清楚这里的ClassName 应该是什么,因为上面查询中使用的IUserEventsCollectionPage 是一个接口,而online search 并没有提供关于这个接口的太多信息。

private void hlBtnFileDownload_Click(object sender, RoutedEventArgs e)
{
    ClassName classObj = dataGridName.SelectedItem as ClassName;
    string id = classObj.ID;
}

更新

为了回答用户@ Martin Zikmund 的问题,DataGrid ItemsSource 设置如下:

EventList.ItemsSource = events.CurrentPage.ToList();

此外,我在上面的按钮单击事件中尝试了以下操作,但是当单击单元格时,它返回下面的 eventitem 为空。同样,使用 Event eventitem = (sender as FrameworkElement).DataContext as Event; 也会将 eventitem 返回为 null。

List<Event> eventitem = (sender as FrameworkElement).DataContext as List<Event>;
            string st = eventitem[1].ToString();

【问题讨论】:

  • 如何设置DataGridItemsSource?
  • @MartinZikmund 我设置为EventList.ItemsSource = events.CurrentPage.ToList();
  • @MartinZikmund 为了回答您的问题,我还添加了一个 UPDATE 部分,其中包含更多详细信息。
  • 你的DataGrid能很好的显示吗?如果您使用 object eventitem = (sender as FrameworkElement).DataContext; ,它可以返回正确的 DataContext 还是仍然为空?如果还是null,能否提供一个简单的样本,可以复制给我们测试?
  • 当我按照您分享的教程并单击 HyperlinkBut​​ton 时,我可以使用 Event eventitem = (sender as FrameworkElement).DataContext as Event; 获得正确的 DataContext。所以我无法重现你的问题。最好提供一个可以复制的简单样本供我们测试。

标签: c# uwp datagrid windows-community-toolkit


【解决方案1】:

绑定到单个单元格的项目不是List&lt;Event&gt;,而只是Event,所以以下应该可以工作:

var event = (sender as FrameworkElement).DataContext as Event;

【讨论】:

  • @MartinZimu 正如我在 UPDATE 部分的第三行中指出的那样,我已经尝试过了。但它仍然将eventitem 返回为空。点击事件正确触发,并且我已经测试过,它也确实返回了正确的索引(EventList.SelectedIndex)。我在对@Faywang-MSFT 的评论中解释了如何对其进行测试。我还会尝试在某处上传样本,并让您和其他人知道。我在美国东部时间时区的回复中可能存在时间间隔 - 现在是凌晨 2:00 之后。
  • @nam 哦,对不起,我完全错过了 :-( ...我也会尝试在本地测试它,但是在 Github 上进行简单的复制会很棒:-)
  • 你是对的,Event eventitem = (sender as FrameworkElement).DataContext as Event; 应该有效。我通过从在线链接示例(我在上面给出)中创建一个简单的示例来测试它,并且它有效。我需要在我的真实应用程序中调试代码并检查我可能缺少什么。
  • 很高兴它有帮助:-)
猜你喜欢
  • 1970-01-01
  • 2014-04-24
  • 1970-01-01
  • 1970-01-01
  • 2021-01-03
  • 2012-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多