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;}