我的 WP7 应用程序中有这个 ToggleButton
,我将其绑定(bind)到 ViewModel 中的属性。我还有一个 ToggleButton
命令,它在单击按钮时起作用。
根据该命令的结果,我设置了绑定(bind)到 ToggleButton.IsChecked
属性的属性。但无论我将属性设置为什么,切换按钮都有自己的生命,只是在未选中和选中之间切换。这是预期的行为还是错误?
似乎切换按钮在点击时失去了绑定(bind),这是真的吗?我希望它绑定(bind)的原因是我并不总是想更改选中状态,因为我的命令中的逻辑可能会失败,例如网络已关闭,因此无法在后端设置我想要的内容,等等。
这个问题有什么解决方法吗?
Xaml:
<ToggleButton x:Name="ToggleButton" Style="{StaticResource ToggleButtonStyle}" IsChecked="{Binding IsToggleButtonChecked}, Mode=OneWay}" Command="{Binding ToggleButtonCommand, Mode=OneWay}" CommandParameter="{Binding ToggleButtonCommandParameter}"/>
样式根据状态设置按钮的图像。该命令在单击按钮时执行逻辑,并且如前所述,将 IsToggleButtonChecked 设置为所需值。我在 IsChecked 上都尝试过 OneWay 和 TwoWay,但我看不出有什么不同。
View 模型:
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
收到您对绑定(bind)属性所做的任何更改的通知。
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;
以取消选中按钮。
关于c# - 在 WP7 中绑定(bind) ToggleButton 的 IsChecked 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7743074/