Мне действительно интересно, что я могу поместить в 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;
//...
}
}
}
Этот код форматирует выделенный текст, переключает состояние переключателя, когда курсор находится перед отформатированнымchar / имеет отформатированные символы, как в слове ...
1.) Куда относится такой код?Код позади или ViewModel?На самом деле я знаю ответ из-за технических ограничений RTBox, он останется в коде позади.
2.) Логика переключения кнопок форматирования выполняется с помощью
Но это не сработает, так как BoldCommand не может выполнить метод, который будет форматировать выделенный текст, так как выделенный текст RTB не может быть привязан к ViewModel ...
Как справиться с этим?
ОБНОВЛЕНИЕ :
Ward Bell сказал:
"Я открыт для некоторого кода в коде позади;... Я рисую черту в логике принятия решений. Я чувствую запах крысы, когда вижу условное утверждение любого рода. Именно здесь появляются ошибки. Условная логика - это код, который мы должны тестировать. "
source: http://codebetter.com/blogs/wardbell/archive/2010/03/19/mvvm-josh-smith-s-way.aspx