WPF/MVVM:RichTexBox作为datagrid单元格编辑器,是否将格式化代码放入ViewModel?

WPF/MVVM:RichTexBox作为datagrid单元格编辑器,是否将格式化代码放入ViewModel?,wpf,mvvm,binding,richtextbox,Wpf,Mvvm,Binding,Richtextbox,我真的很想知道我能在ViewModel中放些什么 如果需要测试,可能有人会说 但是当获取所选文本的CaretPosition等属性没有相关性时 属性,然后最好忘记ViewModel 目前,我的代码中有以下内容: private void rtbContent_SelectionChanged(object sender, System.Windows.RoutedEventArgs e) { RichTextBox rtb = sender as Rich

我真的很想知道我能在ViewModel中放些什么

如果需要测试,可能有人会说

但是当获取所选文本的CaretPosition等属性没有相关性时

属性,然后最好忘记ViewModel

目前,我的代码中有以下内容:

private void rtbContent_SelectionChanged(object sender, System.Windows.RoutedEventArgs e)
        {
            RichTextBox rtb = sender as RichTextBox;

            TextPointer tpForward = rtb.CaretPosition.GetNextContextPosition(LogicalDirection.Forward);
            TextPointer tpBackward = rtb.CaretPosition.GetNextContextPosition(LogicalDirection.Backward);

            if (tpForward != null && tpBackward != null)
            {
                DependencyObject nextObj = tpForward.GetAdjacentElement(LogicalDirection.Forward);
                DependencyObject prevObj = tpBackward.GetAdjacentElement(LogicalDirection.Backward);

                TextElement textElement = (TextElement)(nextObj ?? prevObj);

                if (textElement != null)
                {
                    tbBold.IsChecked = textElement.FontWeight == FontWeights.Bold;
                    tbItalic.IsChecked = textElement.FontStyle == FontStyles.Italic;
                    //...
                }
            }          
        }
这段代码正在格式化所选文本,当光标位于格式化字符之前/已格式化字符之前时,切换切换按钮的状态,就像在word中一样

一,。这些代码属于哪里?代码隐藏还是视图模型?事实上,我知道答案,因为RTBox的技术限制,它将留在代码后面

二,。切换格式按钮的逻辑通过

但这不起作用,因为BOLD命令无法执行格式化所选文本的方法,因为RTB的所选文本无法绑定到ViewModel

如何应对

更新:

沃德·贝尔说:

我对代码背后的一些代码持开放态度。。。我以决策逻辑为界限。当我看到任何类型的条件语句时,我都会感到很不自在。那是虫子繁殖的地方。条件逻辑是我们应该测试的代码


来源:

数据进入模型,UI进入视图,其中包括用于显示的格式化文本。现在,请记住,视图还可以包含代码,它不一定是严格意义上的XAML。

这一点帮助了我:请参阅IanR的帖子。