绑定复选框未使用 Caliburn Micro 通过 ViewModel 属性更新

问题描述

XAML 代码

     <DataGrid ItemsSource="{Binding EmailAddressList,Mode=TwoWay}" AutoGenerateColumns="False" 
              Grid.ColumnSpan="2" Grid.RowSpan="3" CanUserAddRows="False">
                <DataGrid.Columns>
                    <DataGridTemplateColumn Width="220">
                        <DataGridTemplateColumn.Header >
                            <CheckBox  Content="Select_All"  IsEnabled="True" IsChecked="{Binding 
                              IsAllChecked,Mode=TwoWay}"    cal:Message.Attach="[Event Checked]= 
                             [Action Check_All]; [Event Unchecked]=[Action UnCheck_All]"/>
                        </DataGridTemplateColumn.Header>
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <CheckBox x:Name="isCheckBoxChecked" Margin="1" IsChecked="{Binding 
                                 isCheckBoxChecked,Mode=TwoWay}" HorizontalAlignment="Left" 
                                 cal:Message.Attach="[Event Checked]=[Action RCheck($dataContext)]; 
                                [Event Unchecked]=[Action runcheck($dataContext)]"/>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>
                    <!--<DataGridCheckBoxColumn Header="CheckAll"  Width="220"/>-->
                    <DataGridTextColumn Header="Email" Width="220" Binding="{Binding 
                     recipientEmail}"/>
                    <DataGridTextColumn Header="Name" Width="220" Binding="{Binding EmployeeName}"/>
                    <DataGridTextColumn Header="Company" Width="220" Binding="{Binding 
                     CompanyName}"/>
                </DataGrid.Columns>
         </DataGrid>
    

视图模型:

        public BindableCollection<RecipientSectionModel> EmailAddressList
         {
            get { return _EmailAddressList; }
            set
            {
                _EmailAddressList = value;
                NotifyOfPropertyChange(() => EmailAddressList);
            }

        }

       public bool IsAllChecked
        {
            get { return _IsAllChecked; }
            set
            {
                _IsAllChecked = value;
                NotifyOfPropertyChange(()=>IsAllChecked);
            }
        }
      public void Check_All()
        {
            if (!IsAllChecked)
            {

                foreach (RecipientSectionModel m in EmailAddressList)
                {
                    m.isCheckBoxChecked = true;
                }
                
                EmailAddressList.Refresh();
                IsAllChecked = true;
            }
        }
        public void UnCheck_All()
        {
            if (IsAllChecked)
            {

                foreach (RecipientSectionModel m in EmailAddressList)
                {
                    m.isCheckBoxChecked = false;
                }
                EmailAddressList.Refresh();
                IsAllChecked = false;
               
            }
        }
      public void RCheck(RecipientSectionModel model)
        {

            EmailAddressList.Where(x => x.EmployeeName == 
            model.EmployeeName).First().isCheckBoxChecked = 
            true;
            AllChecked();
             
        }
     public void runcheck(RecipientSectionModel model)
        {
            if (IsAllChecked)
            {
                EmailAddressList.Where(x => x.EmployeeName == 
                model.EmployeeName).FirstOrDefault().isCheckBoxChecked = false;
                IsAllChecked = false;
            }
            else
            {
                EmailAddressList.Where(x => x.EmployeeName == 
                model.EmployeeName).FirstOrDefault().isCheckBoxChecked = false;
            }
             EmailAddressList.Refresh();
            
        }
       public void AllChecked()
        {
            if (EmailAddressList.All(x => x.isCheckBoxChecked == true))
            {
              
                IsAllChecked = true;
                EmailAddressList.Refresh();
            }
            else
            {                
                IsAllChecked = false;
                EmailAddressList.Refresh();
            }
        }

我已经声明了一个复选框 Select_All,它绑定到 viewmodel 中的 IsAllChecked 布尔字段。 通过 viewmodel IsAllChecked 属性更新时,Select_All 复选框不会被选中/取消选中。 一切正常,当我选择 Select_All 复选框或单个复选框时,事件会被触发。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...