在WPF数据绑定,我可以器isChecked属性绑定到一些数据,例如用户设置,但我需要处理“CheckChanged”事件,我知道我可以seperately手柄选中,未选中的事件,但有什么办法,当该值更改为得到通知?
<CheckBox Content="Case Sensitive" IsChecked="{Binding bSearchCaseSensitive,
Source={x:Static Properties:Settings.Default}}" />
注意:如果选中或取消选中我不在乎。我只是想,当它改变时被通知。
那你可以处理选中和未选中的事件seperately并不意味着你必须。如果你不想遵循MVVM模式,你可以简单地附上相同的处理这两个事件,你有你的改变的信号:
<CheckBox Checked="CheckBoxChanged" Unchecked="CheckBoxChanged"/>
在代码隐藏;
private void CheckBoxChanged(object sender, RoutedEventArgs e)
{
MessageBox.Show("Eureka, it changed!");
}
请注意,WPF大力鼓励利用INotifyPropertyChanged的和/或DependencyProperties的一个原因MVVM模式。这是一些作品,不是我想鼓励良好的编程习惯。
林把这个在回答中,因为它是一个评论太长:
如果你需要的虚拟机是知道什么时候CheckBox
改变时,你真的应该绑定CheckBox
到虚拟机,而不是一个静态值:
public class ViewModel
{
private bool _caseSensitive;
public bool CaseSensitive
{
get { return _caseSensitive; }
set
{
_caseSensitive = value;
NotifyPropertyChange(() => CaseSensitive);
Settings.Default.bSearchCaseSensitive = value;
}
}
}
XAML:
<CheckBox Content="Case Sensitive" IsChecked="{Binding CaseSensitive}"/>
作为一个复选框,点击=复选框更改以下也将工作:
<CheckBox Click="CheckBox_Click" />
private void CheckBox_Click(object sender, RoutedEventArgs e)
{
// ... do some stuff
}
它具有当IsThreeState="True"
工作,而只是处理经过和未选中没有额外的优势。
我知道这是一个老问题,但如何只绑定如果使用MVVM到Command
?
例如:
<CheckBox Content="Case Sensitive" Command="{Binding bSearchCaseSensitive}"/>
对我来说,它触发两个Check
和Uncheck
。
怎么样Checked事件?再加上AttachedCommandBehaviors或类似的东西,和DelegateCommand让您的视图模型每次该事件被称为发射的功能。
我发现处理经过使用MVVM模式/未检查的事件简单且适当的方法如下,与Caliburn.Micro:
<CheckBox IsChecked="{Binding IsCheckedBooleanProperty}" Content="{DynamicResource DisplayContent}" cal:Message.Attach="[Event Checked] = [Action CheckBoxClicked()]; [Event Unchecked] = [Action CheckBoxClicked()]" />
和实施方法CheckBoxClicked()在视图模型,做你想做的东西。