【问题标题】:WPF DataGrid: How to determine the index of the row in which a ComboBox selection changed?WPF DataGrid:如何确定 ComboBox 选择更改的行的索引?
【发布时间】:2013-12-14 03:36:55
【问题描述】:

我一直在使用这段代码,以确定当前行被交互式编辑

private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    MyModel myModel = (MyModel) dataGrid.CurrentItem;
    int rowIndex = dataGrid.Items.IndexOf(myModel);
    [...]
}

这种方法的局限性在于,当 ComboBox 选择以编程方式更改时,也会执行事件处理程序。在这种情况下,CurrentItem 为 null,因此我不知道行索引。

TIA

注意:我本身并不真的需要行索引,我也可以使用模型 (CurrentItem)。

在我解决问题后编辑:注意上面的代码如何忽略参数(往往包含真正重要的东西!!)

【问题讨论】:

    标签: wpf datagrid combobox


    【解决方案1】:

    这就是我要找的……

    private void ComboBoxRight_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        ComboBox comboBox    = (ComboBox) sender;
        DataGridRow row      = (DataGridRow) dataGrid.ContainerFromElement(comboBox);
        int rowIndex         = row.GetIndex();
        MyModel gridModel    = (MyModel) dataGrid.Items[rowIndex];
    }
    

    -特拉维斯

    【讨论】:

      【解决方案2】:

      您可以使用 dateGrid.Selected 索引来查找值是从 UI 设置还是从后面的代码设置

      private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
      {
         if(dataGrid.Selected>=0)
         {
           MyModel myModel = (MyModel) dataGrid.CurrentItem;
           int rowIndex = dataGrid.Items.IndexOf(myModel);
            [...]
           dataGrid.Selected=-1;
         }
      
      }
      

      在上述情况下,即使当值从后面的代码更改时调用组合框选择更改,dataGrid 选择的索引将为-1。但是当用户从 Ui 更改它时,您将获得特定行的选定索引,并且它会再次设置为 -1。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-12-08
        • 2013-03-03
        • 1970-01-01
        • 1970-01-01
        • 2011-06-18
        • 1970-01-01
        • 2011-10-14
        • 2018-04-15
        相关资源
        最近更新 更多