Технический код в ViewModel в wpf? - PullRequest
0 голосов
/ 09 августа 2010

У меня есть UserControl с некоторыми пользовательскими свойствами зависимостей, привязанными к свойству clr во ViewModel.ViewModel имеет логику приложения, в которой я имею дело с классами TextPointer / TextRange с помощью FlowDocument.

Должен ли я поместить этот материал в код позади UserControl или во ViewModel?

ranges.Clear();
            TextRange range = new TextRange(boundXamlDocument.ContentStart, boundXamlDocument.ContentEnd);
            foreach (var block in boundXamlDocument.Blocks)
            {
                if (block is Paragraph)
                {
                    Paragraph p = block as Paragraph;
                    //if paragraph has Strikethrough, then do not loop its inlines.
                    if (p.TextDecorations.Contains(TextDecorations.Strikethrough[0]))
                    {
                        TextRange tr = new TextRange(p.ContentStart, p.ContentEnd);
                        ranges.Add(tr);
                    }
                    else
                    {
                        foreach (var run in p.Inlines)
                        {
                            if (run.TextDecorations.Contains(TextDecorations.Strikethrough[0]))
                            {
                                TextRange tr = new TextRange(run.ContentStart, run.ContentEnd);
                                ranges.Add(tr);
                            }
                        }
                    }
                }
            }

1 Ответ

0 голосов
/ 09 августа 2010

Я беспокоюсь о разработке пользовательских / пользовательских элементов управления только тогда, когда у меня есть концепция, которая не вписывается ни в один из обычных элементов управления (редко или никогда), или у меня есть пользовательское поведение элемента управления, которое я хочу использовать повторно (более распространенное).

Чем более абстрактным может быть ваш контроль, тем больше будет возможность его повторного использования.Хотя, делая его настолько абстрактным, что никто не получит никакой выгоды от этого, он будет делать слишком много:)

Если у вас есть логика приложения, лучше всего определить ее в модели представления (или модели), когда ввсе возможно.Когда эта логика изменится, это не нарушит других пользователей вашего элемента управления.

Если функция элемента управления не относится к конкретному стилю представления / ввода пользователя и специфична для этого экземпляра элемента управленияВы, вероятно, должны поместить его в модель представления.

Редактировать:

Из ваших комментариев кажется, что код, который вы пытаетесь написать, зависит от элементов пользовательского интерфейса (TextBlock текстовые декораторы).Это означает, что он должен и должен идти в поле зрения.

...