如何通过WPF绑定实现点击Pause按钮后自动切换为Resume文本?
第一步:修正ViewModel代码
你使用的MvvmLight库已经封装了属性变更通知逻辑,只需让你的ViewModel继承ViewModelBase基类,调整属性定义和赋值逻辑即可:
// 首先ViewModel需要继承MvvmLight提供的ViewModelBase基类 public class YourViewModel : ViewModelBase { private bool _pause; public bool Pause { get => _pause; set { if (_pause != value) { _pause = value; RaisePropertyChanged(); // 触发属性变更通知 } } } private string _btn_pause_text; public string Btn_Pause_Text { get => _btn_pause_text; set { if (_btn_pause_text != value) { _btn_pause_text = value; RaisePropertyChanged(); // 触发通知,告知UI更新对应绑定值 } } } // 构造函数中给按钮文本赋初始值 public YourViewModel() { Btn_Pause_Text = "Pause"; } public ICommand onPauseCommand => new RelayCommand(onPause); private void onPause() { if (!_pause) { Pause = true; // 直接给属性赋值,不要修改私有字段,走属性set方法触发通知 Btn_Pause_Text = "Resume"; } else { Pause = false; Btn_Pause_Text = "Pause"; } } }
第二步:修正XAML绑定
删除错误的Name属性绑定,将按钮的Content属性绑定到ViewModel的文本属性即可:
<Button Grid.Row="7" Grid.Column="0" Content="{Binding Btn_Pause_Text}" Height="37" Width="88" Command="{Binding onPauseCommand}" />
逻辑说明
WPF绑定依赖INotifyPropertyChanged接口实现数据和UI的同步,你之前的代码存在两个问题:
- 属性没有触发变更通知,UI无法感知数据源已经修改
- 按钮Content属性写死为固定值,没有绑定到动态文本属性,Name属性本身也不支持绑定命令,无需额外配置
内容的提问来源于stack exchange,提问作者user3884423
相关产品推荐
相关产品推荐

