在WPF数据绑定中,我可以将IsChecked属性绑定到某些数据,例如用户设置,但我需要处理"CheckChanged"事件,我知道我可以单独处理Checked,Unchecked事件,但是有什么方法可以在此时收到通知价值改变了吗?
<CheckBox Content="Case Sensitive" IsChecked="{Binding bSearchCaseSensitive,
Source={x:Static Properties:Settings.Default}}" />
Run Code Online (Sandbox Code Playgroud)
注意:我不在乎是否选中或未选中.我只是想在更改时收到通知.
nvo*_*igt 87
您可以单独处理已检查和未检查的事件并不意味着您必须这样做.如果您不想遵循MVVM模式,您可以简单地将相同的处理程序附加到这两个事件,并且您有更改信号:
<CheckBox Checked="CheckBoxChanged" Unchecked="CheckBoxChanged"/>
Run Code Online (Sandbox Code Playgroud)
在代码隐藏中;
private void CheckBoxChanged(object sender, RoutedEventArgs e)
{
MessageBox.Show("Eureka, it changed!");
}
Run Code Online (Sandbox Code Playgroud)
请注意,WPF强烈鼓励使用INotifyPropertyChanged和/或DependencyProperties的MVVM模式.这是可行的,而不是我想鼓励作为良好的编程习惯.
Fed*_*gui 13
我把它放在一个答案中,因为评论太长了:
如果您需要VM在CheckBox更改时知道,您应该真正绑定CheckBox到VM,而不是静态值:
public class ViewModel
{
private bool _caseSensitive;
public bool CaseSensitive
{
get { return _caseSensitive; }
set
{
_caseSensitive = value;
NotifyPropertyChange(() => CaseSensitive);
Settings.Default.bSearchCaseSensitive = value;
}
}
}
Run Code Online (Sandbox Code Playgroud)
XAML:
<CheckBox Content="Case Sensitive" IsChecked="{Binding CaseSensitive}"/>
Run Code Online (Sandbox Code Playgroud)
Rob*_*Rob 13
作为复选框,单击=复选框更改以下内容也将起作用:
<CheckBox Click="CheckBox_Click" />
Run Code Online (Sandbox Code Playgroud)
private void CheckBox_Click(object sender, RoutedEventArgs e)
{
// ... do some stuff
}
Run Code Online (Sandbox Code Playgroud)
它具有工作的额外优势,IsThreeState="True"而只是处理Checked和Unchecked没有.
我知道这是一个古老的问题,但是Command如果使用MVVM 仅绑定到呢?
例如:
<CheckBox Content="Case Sensitive" Command="{Binding bSearchCaseSensitive}"/>
Run Code Online (Sandbox Code Playgroud)
对我来说,它会同时触发Check和Uncheck。
| 归档时间: |
|
| 查看次数: |
87532 次 |
| 最近记录: |