我真的很想知道我可以在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;
//...
}
}
}
此代码格式化选定文本,当光标位于格式化字符/格式化字符之前切换togglebutton的状态,就像在单词中一样...
1。)这些代码属于哪里?代码隐藏或ViewModel?实际上我知道答案,因为RTBox的技术限制,它将留在代码隐藏。
2.)切换格式按钮的逻辑是通过
完成的
但这不起作用,因为BoldCommand无法执行格式化所选文本的方法,因为RTB的选定文本无法绑定到ViewModel ...
如何应对?
更新:
病房铃声说:
“我对代码隐藏中的一些代码持开放态度; ...我在决策逻辑中划清界限。当我看到任何类型的条件语句时,我闻到了一只老鼠。这就是错误繁殖的地方。条件逻辑是代码我们应该进行测试。“
来源:http://codebetter.com/blogs/wardbell/archive/2010/03/19/mvvm-josh-smith-s-way.aspx
答案 0 :(得分:0)
数据进入模型,UI进入视图,其中包括格式化文本以供显示。现在,请记住View也可以包含代码隐藏 - 它不一定是严格的XAML。