WPF绑定复选框IsChecked到其他复选框(IsChecked ||!IsEnabled)

WPF绑定复选框IsChecked到其他复选框(IsChecked ||!IsEnabled),第1张

概述我有一个选择’全部’复选框,我想绑定到其他复选框的(IsChecked ||!IsEnabled). >选中“全部”选中所有已启用的复选框. >取消选中“全部”取消选中所有复选框. >手动检查每个已启用的复选框将选中“全部”. >选中所有已启用的复选框和“全部”并且用户取消选中任何复选框后,“全部”会自动取消选中. 我是WPF Databinding的新手.我想也许我只是点击“全部”来设置其他复选 我有一个选择’全部’复选框,我想绑定到其他复选框的(IsChecked ||!IsEnabled).

>选中“全部”选中所有已启用的复选框.
>取消选中“全部”取消选中所有复选框.
>手动检查每个已启用的复选框将选中“全部”.
>选中所有已启用的复选框和“全部”并且用户取消选中任何复选框后,“全部”会自动取消选中.

我是WPF Databinding的新手.我想也许我只是点击“全部”来设置其他复选框.但我不知道如何绑定到多个源的两个属性.当我点击“全部”并手动取消选中另一个复选框时,“全部”需要取消选中.

解决方法 这是使用转换器在Xaml中执行此 *** 作的方法.这假设您的所有CheckBox都直接作为Xaml中的控件添加(它不是非常动态,不适用于DataTemplate等).首先,我们创建三个CheckBoxes(CheckBox1,CheckBox2,CheckBox3),在检查CheckAllCheckBox时将检查/取消选中.它也会反向运作.

更新
最后一部分(忽略禁用的CheckBox)在这里有点问题,我对这个解决方案并不是很疯狂,但我看不出更好的方法.我们存储Convert的值,并在ConvertBack中重用它们用于禁用的CheckBox.这样做,我们还应该为CheckAllConverter添加x:Shared =“False”属性,因为每个使用它的MultiBinding都需要一个新实例(在这种情况下不太可能但仍然……)

<Window.Resources>    <local:CheckAllConverter x:Key="CheckAllConverter" x:Shared="False"/></Window.Resources><StackPanel>    <CheckBox Content="Check All"              name="CheckAllCheckBox">        <CheckBox.IsChecked>            <MultiBinding Converter="{StaticResource CheckAllConverter}">                <Binding Elementname="CheckBox1" Path="IsChecked" />                <Binding Elementname="CheckBox1" Path="IsEnabled" Mode="OneWay"/>                <Binding Elementname="CheckBox2" Path="IsChecked" />                <Binding Elementname="CheckBox2" Path="IsEnabled" Mode="OneWay"/>                <Binding Elementname="CheckBox3" Path="IsChecked" />                <Binding Elementname="CheckBox3" Path="IsEnabled" Mode="OneWay"/>            </MultiBinding>        </CheckBox.IsChecked>    </CheckBox>    <CheckBox Content="CheckBox 1"              name="CheckBox1"/>    <CheckBox Content="CheckBox 2"              name="CheckBox2"/>    <CheckBox Content="CheckBox 3"              name="CheckBox3"/></StackPanel>

CheckAll转换器

public class CheckAllConverter : IMultiValueConverter{    private object[] convertValues = null;    public object Convert(object[] values,Type targettype,object parameter,System.Globalization.CultureInfo culture)    {        convertValues = new object[values.Length];        for(int i = 0; i < values.Length; i++)        {            convertValues[i] = values[i];        }        for (int i = 0; i < values.Length; i += 2)        {            bool isChecked = (bool)values[i];            bool isEnabled = (bool)values[i + 1];            if (isEnabled == false)            {                continue;            }            if (isChecked == false)            {                return false;            }        }        return true;    }    public object[] ConvertBack(object value,Type[] targettypes,System.Globalization.CultureInfo culture)    {        object[] values = new object[targettypes.Length];        for (int i = 0; i < values.Length; i += 2)        {            if (convertValues != null && (bool)convertValues[i + 1] == false)            {                values[i] = convertValues[i];            }            else            {                values[i] = value;            }            // IsEnabled is OneWay and won't care about this value            values[i + 1] = null;        }        return values;    }}
总结

以上是内存溢出为你收集整理的WPF绑定复选框IsChecked到其他复选框(IsChecked ||!IsEnabled)全部内容,希望文章能够帮你解决WPF绑定复选框IsChecked到其他复选框(IsChecked ||!IsEnabled)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1142262.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存