C# 在XAML中使用DataTriggers强制更改复选框属性上的事件

C# 在XAML中使用DataTriggers强制更改复选框属性上的事件,c#,wpf,xaml,checkbox,datatrigger,C#,Wpf,Xaml,Checkbox,Datatrigger,我有一个复选框设置如下: <CheckBox Unchecked="checkBox_Unchecked"> <CheckBox.Style> <Style TargetType="CheckBox"> <Setter Property="IsChecked" Value="True"/> <Style.Triggers> <D

我有一个复选框设置如下:

<CheckBox Unchecked="checkBox_Unchecked">
    <CheckBox.Style>
        <Style TargetType="CheckBox">
            <Setter Property="IsChecked" Value="True"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding MyVal}" Value="{x:Null}">
                    <Setter Property="IsChecked" Value="False" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </CheckBox.Style>
</CheckBox>


当我的Setter设置IsChecked=False时,是否有任何方法可以触发未检查事件?

这可能不是一种程序方法;但是对于你的陈述,我想我应该明确指出,通过“强制”…你可以利用这个方法来实现这一点

1) 在ViewModel中,有一个布尔属性侦听“INotifyPropertyChanged”

2) 让属性的默认值为true

3) 在构造函数中,将属性的值重新指定为“false”

4) 这将触发未检查事件

XAML:


对于案例
IsChecked=false也需要一个Setter。另外,我建议绑定到
ViewModel
中的命令,尝试以下操作:

            <Style.Triggers>
            <Trigger Property="IsChecked" Value="true">
                <Setter Property="Command" Value="{Binding ElementName=this, Path=DataContext.ItemCheckedCommand}"></Setter>
            </Trigger>
            <Trigger Property="IsChecked" Value="false">
                <Setter Property="Command" Value="{Binding ElementName=this, Path=DataContext.ItemCheckedCommand}"></Setter>
            </Trigger>
        </Style.Triggers>

当IsChecked of Checkbox为False时,应引发未检查事件。这是默认的行为。奇怪的是,它似乎是在一种情况下,而不是在另一种情况下。我想我应该用“强制”来说明,我的意思是让它更详细。
    public partial class MainWindow : INotifyPropertyChanged
    {
        private bool m_CheckboxChecked = true;

        public bool CheckboxChecked
        {
            get { return m_CheckboxChecked; }
            set { m_CheckboxChecked = value; OnPropertyChanged("CheckboxChecked"); }
        }

        public MainWindow()
        {
            DataContext = this;
            InitializeComponent();
            CheckboxChecked = false;
        }

        private void ToggleButton_OnUnchecked(object sender, RoutedEventArgs e)
        {
            Console.WriteLine("Un-Checked");
        }

        public event PropertyChangedEventHandler PropertyChanged;

        public void OnPropertyChanged(string name)
        {
            if (PropertyChanged != null)
            {
                this.PropertyChanged(this, new PropertyChangedEventArgs(name));
            }
        }
    }
            <Style.Triggers>
            <Trigger Property="IsChecked" Value="true">
                <Setter Property="Command" Value="{Binding ElementName=this, Path=DataContext.ItemCheckedCommand}"></Setter>
            </Trigger>
            <Trigger Property="IsChecked" Value="false">
                <Setter Property="Command" Value="{Binding ElementName=this, Path=DataContext.ItemCheckedCommand}"></Setter>
            </Trigger>
        </Style.Triggers>
public RelayCommand ItemCheckCommand {get; private set;}