WPF / MVVM: RichTexBox, как редактор ячеек сетки данных, помещает код форматирования во ViewModel? - PullRequest
0 голосов
/ 31 июля 2010

Мне действительно интересно, что я могу поместить в 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

1 Ответ

0 голосов
/ 31 июля 2010

Данные поступают в модель, пользовательский интерфейс - в представление, включая форматирование текста для отображения. Теперь имейте в виду, что представление также может включать в себя код позади - он не обязательно должен быть строго XAML.

...