代码之家  ›  专栏  ›  技术社区  ›  viky

默认情况下停止Datagrid选择第一行

  •  19
  • viky  · 技术社区  · 14 年前

    我正在使用Wpf工具包DataGrid。每当我将Itemssource分配给它时,它的第一个项就会被选中,并且它的selectionChanged事件就会被调用。如何在默认情况下停止选择任何行?

    4 回复  |  直到 14 年前
        1
  •  39
  •   John Cummings    3 年前

    检查是否已设置 IsSynchronizedWithCurrentItem="True"

    <DataGrid IsSynchronizedWithCurrentItem="True" ... 
                
                
    

    将此属性设置为true时,第一项的选择是默认行为。

        2
  •  11
  •   Dan J    13 年前

    您的DataGrid很可能绑定到一个集合,比如具有CurrentItem属性的PagedCollectionView。此属性在两个方向上与选定行自动同步。解决方案是将CurrentItem设置为null。你可以这样做:

    PagedCollectionView pcv = new PagedCollectionView(collection);
    pcv.MoveCurrentTo(null);
    dataGrid.ItemsSource = pcv;
    

    DataGrid.IsSynchronizedWithCurrentItem

        3
  •  3
  •   Benoit Dufresne    7 年前

    HCL的答案是正确的,但是对于像我这样的快速和松散的读者来说,它被证明是令人困惑的,最后我花了更多的时间四处调查其他事情,然后回到这里仔细阅读。

    <DataGrid IsSynchronizedWithCurrentItem="False" ... 
    

    财产 IsSynchronizedWithCurrentItem=True CurrentItem 将与集合的当前项同步。设置 IsSynchronizedWithCurrentItem=False 这就是我们想要的。

    SynchronizeCurrent=False

        4
  •  1
  •   Mageician    8 年前

    我尝试了许多不同的方法,但对我来说最有效的方法是捕获第一个选择事件,并通过取消选择datagrid上的所有内容来“撤消”它。

    下面是使这项工作的代码,我希望它对其他人有益:)

    /* Add this inside your window constructor */
    this.myDataGrid.SelectionChanged += myDataGrid_SelectionChanged;
    
    /* Add a private boolean variable for saving the suppression flag */
    private bool _myDataGrid_suppressed_flag = false;
    
    /* Add the selection changed event handler */
    void myDataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        /* I check the sender type just in case */
        if (sender is System.Windows.Controls.DataGrid)
        {
             System.Windows.Controls.DataGrid _dg = (System.Windows.Controls.DataGrid)sender;
    
            /* If the current item is null, this is the initial selection event */
             if (_dg.CurrentItem == null)
             {
                  if (!_myDataGrid_suppressed_flag)
                  {
                        /* Set your suppressed flat */
                        _dgRateList_suppressed_flag = true;
                        /* Unselect all */
                        /* This will trigger another changed event where CurrentItem == null */
                        _dg.UnselectAll();
    
                        e.Handled = true;
                        return;
                  }
             }
             else
             {
                    /* This is a legitimate selection changed due to user interaction */
             }
        }
    }