在WP7中绑定togglebutton的IsChecked属性
本文关键字:IsChecked 属性 togglebutton 绑定 WP7 | 更新日期: 2023-09-27 18:11:00
我有这个ToggleButton
在我的WP7应用程序,我绑定到我的ViewModel属性。我也有一个命令,以ToggleButton
的工作时,点击按钮。
根据该命令的结果,我设置了绑定到ToggleButton.IsChecked
属性的属性。但无论我将属性设置为什么,切换按钮都有自己的生命周期,只是在未选中和已选中之间切换。这是预期的行为还是这是一个bug?
有解决这个问题的方法吗?
Xaml:<ToggleButton x:Name="ToggleButton" Style="{StaticResource ToggleButtonStyle}" IsChecked="{Binding IsToggleButtonChecked}, Mode=OneWay}" Command="{Binding ToggleButtonCommand, Mode=OneWay}" CommandParameter="{Binding ToggleButtonCommandParameter}"/>
样式根据状态设置按钮的图像。该命令在单击按钮时执行逻辑操作,如前所述,将IsToggleButtonChecked设置为所需值。我在IsChecked上都试过单向和双向,但我看不出有什么区别。
ViewModel:
public const string IsToggleButtonCheckedPropertyName = "IsToggleButtonChecked";
private bool _isToggleButtonChecked;
public bool IsToggleButtonChecked
{
get { return _isToggleButtonChecked; }
set
{
if (_isToggleButtonChecked == value)
{
return;
}
_isToggleButtonChecked = value;
RaisePropertyChanged(IsToggleButtonCheckedPropertyName);
}
}
每次我想要更改ToggleButton的复选状态时设置此属性。
确保ToggleButton
被通知您对绑定属性所做的任何更改。
XAML
<ToggleButton Click="OnClicked"
IsChecked="{Binding IsChecked, Mode=TwoWay}" />
c# private bool _isChecked = false;
public bool IsChecked
{
get { return _isChecked; }
set
{
if( value != _isChecked ) {
_isChecked = value;
NotifyPropertyChanged( "IsChecked" );
}
}
}
在代码后面设置您的逻辑IsChecked = false;
以取消选中按钮。
在没有看到任何代码的情况下,我的第一直觉将是验证ViewModel实现了INotifyPropertyChanged,并且绑定到IsEnabled的属性的setter在设置时触发属性更改事件。
using System.ComponentModel;
class MyViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private bool _enableCheckBox;
public bool EnableCheckBox
{
get { return _enableCheckBox }
set
{
_enableCheckBox = value;
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs("EnableCheckBox"));
}
}
}
对于其他可能想知道相同问题的人:我通过使用禁卫军所说的双向模式来解决这个问题,但让它在正常情况下自行改变其值。当我想让它保持与点击之前相同的状态时,我只需将可绑定值设置为所需值。此外,我还有另一个变量,它跟踪未绑定的isChecked状态。通过这样做,我可以相应地检查和设置值,而不会弄乱视觉检查状态。