C# CommandBinding干扰INotifyPropertyChanged

C# CommandBinding干扰INotifyPropertyChanged,c#,wpf,inotifypropertychanged,commandbinding,C#,Wpf,Inotifypropertychanged,Commandbinding,使用WPF,我正在构建一个非常简单的文档编辑器,它将提供基本的格式化功能,例如修改用户文本外观的功能,即下划线、粗体、更改字体大小等 我已经为用户输入实现了几个RichTextBox,并希望显示一个按钮,说明格式选项的切换状态,类似于Microsoft Word。例如,如果用户按下CTRL+B,所有输入的文本都将是粗体,而“粗体”按钮将反映此状态(按下) 此时,按钮的IsChecked属性(使用自定义按钮)绑定到属性(IsSelectedTextBold)。使用richTextBox.Selec

使用WPF,我正在构建一个非常简单的文档编辑器,它将提供基本的格式化功能,例如修改用户文本外观的功能,即下划线、粗体、更改字体大小等

我已经为用户输入实现了几个RichTextBox,并希望显示一个按钮,说明格式选项的切换状态,类似于Microsoft Word。例如,如果用户按下CTRL+B,所有输入的文本都将是粗体,而“粗体”按钮将反映此状态(按下)

此时,按钮的IsChecked属性(使用自定义按钮)绑定到属性(IsSelectedTextBold)。使用richTextBox.SelectionChanged检测选择更改,我调用PropertyChanged(“IsSelectedTextBold”)(定义如下)。这是意料之中的事;但是,当用户高亮显示一个单词并按CTRL+B时,所选内容的字体权重将更改为粗体,但按钮不会反映更改,因为不会引发richTextBox.SelectionChanged事件。为了寻找一种方法来检测用户何时按下CTRL+B,我注册了自己的CommandBinding:

CommandManager.RegisterClassCommandBinding(typeof(RichTextBox),
    new CommandBinding(EditingCommands.ToggleBold, 
    new ExecutedRoutedEventHandler(ToggleBold_Executed),
    new CanExecuteRoutedEventHandler(ToggleBold_CanExecute)));
ToggleBold_Executed()实现了对粗体的切换,并调用PropertyChanged(“IsSelectedTextBold”)通知按钮发生了更改

由于某些原因,PropertyChanged设置为null,并且在从ToggleBold_Executed()函数引发时不会激发,但在richTextBox_SelectionChanged事件调用时工作正常

作为补充说明,我还考虑将按钮的IsChecked属性绑定到RichTextBox.fontwweight(使用必要的转换器)。唯一阻止我这样做的是有多个RichTextBox。不确定是否要将按钮动态绑定和解除绑定到活动的RichTextBox

谢谢你忍受了这篇冗长的帖子,任何帮助都将不胜感激。谢谢大家!

private void OnPropertyChanged(string propertyName)
{
  if (this.PropertyChanged != null)
  {
    this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
  }
}

我仍然没有找到我原始问题的答案,但这里有一篇博客帖子,为我的目标提供了解决方案:

我仍然没有找到我原始问题的答案,但这里有一篇博客帖子,为我的目标提供了解决方案:

我们可以看到更多的代码吗?我们可以看到更多的代码吗?