如何检查WPF DataGrid中DataTemplateColumn.HeaderTemplate中存在的复选框. [英] How to Check the Checkbox present in the DataTemplateColumn.HeaderTemplate in wpf datagrid.

查看:155
本文介绍了如何检查WPF DataGrid中DataTemplateColumn.HeaderTemplate中存在的复选框.的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是这个wpf的新手.这可能很简单.但是我很挣扎.

我用一个DataGridTextColumn和7个DataTemplate Columns创建了一个数据网格.所有7个DatatemplateColumns都有一个DatagridHeaderTemplate和DatagridCellTemplate. DatagridHeaderTemplate的标题中有一个复选框. DatagridCellTemplates已填充 通过图像.  

默认情况下,数据网格填充有是"图像.如果用户单击标题复选框,则必须在该列中填充否"图像.如果他取消勾选,则必须返回是"图像.

我创建了一个ViewModel来填充单元格的图像.

一切正常.

问题是当我再次加载(编辑功能)时,如果该列填充有否"图像,则应自动选中相应的列标题复选框以进行编辑功能.而且这没有发生.

我尝试在viewmodel类中创建一个布尔变量,并将该变量绑定到也没有发生的复选框.

请帮助. 

解决方案

>>然后应自动选中相应的列标题复选框以进行编辑功能.

根据您的描述,建议您在模型中添加一个IsSelected属性.

公共类用户:InotifyPropertyChanged
    {
        public int ID {get;放; }
        公共字符串FirstName {get;放; }
        公共字符串LastName {get;放; }
        public int年龄{get;放; }
        私人布尔值_IsSelected = false;

        公共事件PropertyChangedEventHandler PropertyChanged;

        公共布尔IsSelected
        {
            得到{return _IsSelected; }
            设置{_IsSelected =值; PropertyChanged?.Invoke(this,new PropertyChangedEventArgs("IsSelected")); }
        }
    } 

然后在XAML中进行绑定.

< DataGridCheckBoxColumn Width =" 0.5 *" Binding ="{Binding IsSelected,Mode = TwoWay,UpdateSourceTrigger = PropertyChanged}"
         < DataGridCheckBoxColumn.Header>
              < CheckBox Name =" chkSelectAll" Checked ="chkSelectAll_Checked"; Unchecked ="chkSelectAll_Unchecked"</CheckBox>
         </DataGridCheckBoxColumn.Header>
    </DataGridCheckBoxColumn> 


私有无效chkSelectAll_Checked(对象发送者,RoutedEventArgs e)
        {
            foreach(dataGrid.ItemsSource中的用户c)
            {
                c.IsSelected = true;
            }
        }

        私有void chkSelectAll_Unchecked(对象发送者,RoutedEventArgs e)
        {
            foreach(dataGrid.ItemsSource中的用户c)
            {
                c.IsSelected = false;
            }
        } 

然后您可以检查以下代码的状态.

私人布尔IsAllSelected()
        {
           bool isAllSelected = true;
           foreach(dataGrid.ItemsSource.OfType< User>()中的用户用户)
            {
                如果(user.IsSelected ==假)
                    返回!isAllSelected;
            }
            返回isAllSelected;
        }
        私人布尔IsAllUnSelected()
        {
            bool isAllUnSelected = true;
            foreach(dataGrid.ItemsSource.OfType< User>()中的用户用户)
            {
                如果(user.IsSelected == true)
                    返回!isAllUnSelected;
            }
            返回isAllUnSelected;
        } 

最好的问候,

鲍勃


Hi, i am new to this wpf. it may be simple. but i am struggling.

i created a datagrid with one DataGridTextColumn and 7 DataTemplate Columns. All the 7 DatatemplateColumns have one DatagridHeaderTemplate and DatagridCellTemplate. DatagridHeaderTemplate has a checkbox in its header. The DatagridCellTemplates are filled by Images.  

By Default, the datagrid is filled with 'Yes' Image. If the user click on the header checkbox, it has to fill the 'No' image to that column. And if he uncheck, it has to go back to 'Yes' image. 

I created a ViewModel to fill the images for the cell. 

everything is happening properly. 

the issue is when i load back again (Edit feature), if the column is filled with 'No' image, then the corresponding column headers checkbox should be checked automatically for edit feature. And this is not happening. 

I tried with creating a boolean variable in the viewmodel class and binded that variable to the checkbox which is also not happening. 

Please help. 

解决方案

Hi,

>> then the corresponding column headers checkbox should be checked automatically for edit feature.

According to your description, I suggest you add a IsSelected property in the Model.

 public class User : INotifyPropertyChanged
    {
        public int ID { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public int Age { get; set; }
        private bool _IsSelected = false;

        public event PropertyChangedEventHandler PropertyChanged;

        public bool IsSelected
        {
            get { return _IsSelected; }
            set { _IsSelected = value; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("IsSelected")); }
        }
    }

And then binding in XAML. 

   <DataGridCheckBoxColumn Width="0.5*" Binding="{Binding IsSelected ,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}">
         <DataGridCheckBoxColumn.Header>
              <CheckBox Name="chkSelectAll" Checked="chkSelectAll_Checked" Unchecked="chkSelectAll_Unchecked"></CheckBox>
         </DataGridCheckBoxColumn.Header>
    </DataGridCheckBoxColumn>


 private void chkSelectAll_Checked(object sender, RoutedEventArgs e)
        {
            foreach (User c in dataGrid.ItemsSource)
            {
                c.IsSelected = true;
            }
        }

        private void chkSelectAll_Unchecked(object sender, RoutedEventArgs e)
        {
            foreach (User c in dataGrid.ItemsSource)
            {
                c.IsSelected = false;
            }
        }

And you can Check the status as below code.

    private bool IsAllSelected()
        {
           bool isAllSelected = true;
           foreach(User user in  dataGrid.ItemsSource.OfType<User>())
            {
                if (user.IsSelected == false)
                    return !isAllSelected;
            }
            return isAllSelected;
        }
        private bool IsAllUnSelected()
        {
            bool isAllUnSelected = true;
            foreach (User user in dataGrid.ItemsSource.OfType<User>())
            {
                if (user.IsSelected == true)
                    return !isAllUnSelected;
            }
            return isAllUnSelected;
        }

Best Regards,

Bob


这篇关于如何检查WPF DataGrid中DataTemplateColumn.HeaderTemplate中存在的复选框.的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆