WPF/MVVM:RichTexBox作为datagrid单元格编辑器,是否将格式化代码放入ViewModel?
我真的很想知道我能在ViewModel中放些什么 如果需要测试,可能有人会说 但是当获取所选文本的CaretPosition等属性没有相关性时 属性,然后最好忘记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
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的帖子。