【问题标题】:SelectionChanged not firing WPFSelectionChanged 未触发 WPF
【发布时间】:2017-11-02 22:17:01
【问题描述】:

我正在使用 WPF 创建一个国际象棋游戏。我需要获取所选单元格(行/列)的索引。

XAML:

<DataGrid Name ="chessGrid"
          AutoGenerateColumns="False"
          HeadersVisibility="None"
          SelectionMode="Single"
          SelectionUnit="Cell"
          CanUserAddRows="False"
          CanUserDeleteRows="False"
          CanUserReorderColumns="False"
          CanUserResizeColumns="False"
          CanUserResizeRows="False"
          CanUserSortColumns="False"
          CurrentCellChanged="chessGrid_CurrentCellChanged"
          SelectionChanged="chessGrid_SelectionChanged">
    <DataGrid.Columns>
        <DataGridTextColumn Width="*" Binding="{Binding columns[0]}" />
        <DataGridTextColumn Width="*" Binding="{Binding columns[1]}" />
        <DataGridTextColumn Width="*" Binding="{Binding columns[2]}" />
        <DataGridTextColumn Width="*" Binding="{Binding columns[3]}" />
        <DataGridTextColumn Width="*" Binding="{Binding columns[4]}" />
        <DataGridTextColumn Width="*" Binding="{Binding columns[5]}" />
        <DataGridTextColumn Width="*" Binding="{Binding columns[6]}" />
        <DataGridTextColumn Width="*" Binding="{Binding columns[7]}" />
        <DataGridTextColumn Width="*" Binding="{Binding columns[8]}" />
        <DataGridTextColumn Width="*" Binding="{Binding columns[9]}" />
    </DataGrid.Columns>

当单元格发生变化时,我会调用:

private void chessGrid_CurrentCellChanged(object sender, System.EventArgs e)
{
    x = chessGrid.CurrentCell.Column.DisplayIndex;
    Debug.WriteLine(x);
}

这允许我获取单元格的列索引。

我目前正在尝试:

private void chessGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    y = chessGrid.SelectedIndex;
    Debug.WriteLine(y);
}

获取行。但这不起作用,当删除 SelectionUnit="Cell" 时,上述工作,但我当然不能这样做,因为你不应该能够选择一整行。我也试过了:

private void chessGrid_CurrentCellChanged(object sender, System.EventArgs e)
{
    x = chessGrid.CurrentCell.Column.DisplayIndex;
    y = chessGrid.Items.IndexOf(chessGrid.CurrentCell)
    Debug.WriteLine(x);
}

哪个设置 y 为 -1?

所以我的问题是如何使用简单的 WPF 和数据网格获取所选单元格的行/列索引?

编辑:一个要求是应用程序应该使用三层架构。

【问题讨论】:

  • 你做错了。阅读有关绑定和 MVVM 的信息。
  • @KostyaK 我忘了提到应用程序必须使用三层架构编写,我认为 MVVM 不兼容,但我读了一遍,谢谢。
  • @Tagor 如果您的意思是单独的数据访问、业务逻辑和表示层,请使用 MVVM。以任何其他方式使用 WPF 既痛苦又困难。

标签: c# wpf xaml


【解决方案1】:

试试这个:

private void dggg_CurrentCellChanged(object sender, EventArgs e)
{
    x = chessGrid.CurrentCell.Column.DisplayIndex;
    y = chessGrid.Items.IndexOf(chessGrid.CurrentCell.Item);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-02
    • 2014-05-08
    • 1970-01-01
    • 2021-03-17
    • 2020-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多