【问题标题】:How to uncheck CheckBox on button click in WPF using C#?如何使用 C# 在 WPF 中单击按钮时取消选中复选框?
【发布时间】:2013-05-22 23:09:19
【问题描述】:

我在 GridControl 列中有一个复选框。 执行某些操作后,必须在 WPF 中单击按钮时取消选中 GridControl 中的选中复选框。有什么想法吗?

<dxg:GridControl Name="grdInfill"  Height="700" VerticalAlignment="Center">
    <dxg:GridControl.Columns>
        <dxg:GridColumn  AllowEditing="True">
            <dxg:GridColumn.CellTemplate>
                <DataTemplate>
                    <CheckBox Name="chkSelect"  HorizontalAlignment="Center" 
                        IsChecked="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=GlassType}"  
                        Checked="CheckEdit_Checked" 
                        Unchecked="CheckEdit_Unchecked" />
                 </DataTemplate>
             </dxg:GridColumn.CellTemplate>
         </dxg:GridColumn>
     </dxg:GridControl.Columns>
     <dxg:GridControl.View>
         <dxg:TableView Name="grdInfillInner"  ShowTotalSummary="True" AutoWidth="True" 
             DetailHeaderContent="True"  ShowIndicator="False" ShowGroupPanel="False" 
             CellValueChanging="grdInfillInner_CellValueChanging">
             <!--GroupRowTemplate="{StaticResource descriptionHeader}"-->
         </dxg:TableView>
     </dxg:GridControl.View>
</dxg:GridControl>
<Button Name="BtnClearAllCheckbox" Content="Clear All Checkbox" Height="20" Width="80" />

帮助赞赏!

【问题讨论】:

  • 使用数据绑定。使用 bool 绑定复选框,然后单击按钮更改将自动更新复选框的 bool 值。看看数据绑定和 INotifyPropertyChanged
  • 能否提供以上示例代码?
  • 我不明白以下内容:IsChecked="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=GlassType}"。你能告诉我们虚拟机或底层结构吗?
  • 我已将其更改为: 很抱歉,但我已经从其他地方复制了它以在 Grid 中演示复选框。我是 WPF 的新手。你能帮我清除按钮单击时的所有复选框值吗?
  • @SHEKHARSHETE:我会试试的。最后一个问题,你是想通过MVVM还是在后面的代码中解决?

标签: c# wpf checkbox wpf-controls devexpress


【解决方案1】:

给你的checkbox一个Uid

<CheckBox Uid="CheckAll" />

比使用这个扩展方法来查找dataTemplate里面的元素--->

public static UIElement FindUid(this DependencyObject parent, string uid)
{
    var count = VisualTreeHelper.GetChildrenCount(parent);
    if (count == 0) return null;

    for (int i = 0; i < count; i++)
    {
        var el = VisualTreeHelper.GetChild(parent, i) as UIElement;
        if (el == null) continue;

        if (el.Uid == uid) return el;

        el = el.FindUid(uid);
        if (el != null) return el;
    }
    return null;
}

像这样在后面的代码中访问 CheckBox

CheckBox checkBox = myDataGrid.FindUid("chkSelect") as CheckBox;

【讨论】:

  • 对不起! el = el.FindUid(uid) 行错误; System.Window.UIElement 不包含 FindUid 的定义...
  • 还是同样的错误!我使用的是 Devecpress 的 GridControl,而不是 DataGrid。任何想法?清除按钮单击时的所有复选框?
【解决方案2】:

试试下面......

 <CheckBox Name="chkSelect"  HorizontalAlignment="Center" IsChecked="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=GlassType,Mode=TwoWay}"

我猜应该有属性“GlassType”

Public Bool GlassType {get;set;}

在绑定时使用 TwoWay 模式并将属性值 GlassType 设置为 True false....

【讨论】:

  • 如何在按钮点击时重置所有复选框?
  • 如果您将 List 对象绑定到复选框,然后单击按钮,您可以循环 List 并将所有设置为 TRUE 或 FALSE......
  • 它是布尔值..因为它在数据模板中不能按名称访问控件.. :(
  • 查看此链接link
  • 我使用的是 Devexpress GridControl 而不是 DataGrid,并且已将 INotifyPropertyChanged 实现为当前类并设置它为我工作的值。
猜你喜欢
  • 2014-08-07
  • 1970-01-01
  • 2016-10-18
  • 1970-01-01
  • 2020-04-05
  • 1970-01-01
  • 2013-06-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多