Moh*_*van 4 wpf binding togglebutton
ToggleButton 支持 ICommand,因此我创建了许多命令,例如 TogglePlayPause、ToggleMute,它工作正常,但我也需要绑定 IsChecked 属性,以便其选中状态始终显示正确的状态。但是当我为 ToggleButton 创建 OneWay 绑定模式并且按下 ToggleButton 时,绑定将会丢失。
问题是为什么ToggleButton支持ICommand但不支持OneWay绑定?我可以设置 TwoWay 绑定,但是当 ToggleButton 使用 Command 时这是个坏主意,因为 Command 处理的实际操作不应该与 TwoWay 绑定重复,有时也是不可能的。在我的例子中 Command=TogglePlayPause IsChecked={Bind to IsMediaPlaying} IsMediaPlaying 应该是只读的。
那么请告诉我如何将 ToggleButton 与 Command 一起使用并绑定其 IsChecked 属性?
OneWayToggleButton您可以通过派生ToggleButton并覆盖单击按钮时发生的情况来编写自己的代码:
public class OneWayToggleButton : ToggleButton
{
protected override void OnClick()
{
RaiseEvent(new RoutedEventArgs(ClickEvent, this));
if (Command != null && Command.CanExecute(CommandParameter))
Command.Execute(CommandParameter);
}
}
Run Code Online (Sandbox Code Playgroud)
然后IsChecked不会被按钮本身修改,只能通过绑定更改。但由于我们仍在使用IsChecked的属性ToggleButton,因此控件的外观和行为将正常。
| 归档时间: |
|
| 查看次数: |
1958 次 |
| 最近记录: |