这是我的选中DataGridCheckBoxColumn列的代码,请问大家有什么办法获取到选中为true的行数吗private void DgAccountManage_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            var cntr = dgAccountManage.ItemContainerGenerator.ContainerFromIndex(dgAccountManage.SelectedIndex);
            DataGridRow ObjROw = (DataGridRow)cntr;
            if (ObjROw != null)
            {
                FrameworkElement objElement = dgAccountManage.Columns[0].GetCellContent(ObjROw);
                if (objElement != null)
                {
                    if (objElement.GetType().ToString().EndsWith("CheckBox"))
                    {
                        System.Windows.Controls.CheckBox objChk = (System.Windows.Controls.CheckBox)objElement;
                        if (objChk.IsChecked == true)
                        {
                            objChk.IsChecked = false;                        }
                        else
                            objChk.IsChecked = true;                       
                    }                }
            }
                    
        }

解决方案 »

  1.   

    当然可以从数据上入手,按钮失效非得要在cs后台手动设置IsEnabled=false,把winform那一套思维习惯忘掉把,在viewmodel层绑定属性完全可以。在viewmodel层中类似:
    var count = list.Count(m=>m.IsSelected);
    if(count>1){
       // TODO 按钮失效
    }
    IsSelected表示绑定到column的属性。把判断加到当前选中的行对象的set方法中即可。 而且selectionchanged是针对datagrid,并不是完全针对checkbox。
      

  2.   

    如果是直接从页面上动手呢?只要是能获取到为true的行数就行
      

  3.   

    你绑定了吗?
    给下XAML
      

  4.   

    用数据绑定好实现些,checkbox直接绑定相应的属性,然后这个属性改变时,调用委托方法,委托方法里面计算选中行数,然后将结果赋值给另一个bool类型变量,另一个控件IsEnabled属性就绑定这个变量。
      

  5.   

    https://blog.csdn.net/Dear200892/article/details/100917939
      

  6.   


    我想你是给错了你需要学会举一反三弄这个他得从头理清MVVM