wpf中ViewModel的技术代码?

wpf中ViewModel的技术代码?,wpf,properties,viewmodel,dependencies,code-behind,Wpf,Properties,Viewmodel,Dependencies,Code Behind,我有一个UserControl,它的一些自定义依赖属性绑定到ViewModel中的clr属性。ViewModel具有应用程序逻辑,我在其中使用FlowDocument处理TextPointer/TextRange类 我应该把这些东西放在UserControl的代码隐藏中还是放在ViewModel中 ranges.Clear(); TextRange range = new TextRange(boundXamlDocument.ContentStart, boundXam

我有一个UserControl,它的一些自定义依赖属性绑定到ViewModel中的clr属性。ViewModel具有应用程序逻辑,我在其中使用FlowDocument处理TextPointer/TextRange类

我应该把这些东西放在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);
                            }
                        }
                    }
                }
            }

只有当我有一个概念不能很好地融入任何一个通常的控件中时,或者我有一个自定义控件行为,我想重用更常见的控件时,我才会费心设计自定义/用户控件

控件越抽象,它的可重用性就越强。尽管如此,将其抽象到没有人会从中获得任何好处将是做得太多了:

如果您有应用程序逻辑,最好尽可能在视图模型或模型中定义它。当这种逻辑改变时,它不会破坏你控制的其他用户

如果控件的某个功能不是特定于确切的表示/用户输入样式,而是特定于该控件实例,则可能应该将其放在视图模型中

编辑:


从您的评论来看,您试图编写的代码似乎依赖于UI元素TextBlock文本装饰器。这意味着它必须而且应该出现在视图中。

从您的答案来看,代码隐藏似乎永远是不可能的。。。我已经用一个示例代码更新了我的init帖子,它看起来像。。。我真的应该把它放到我的ViewModel中,在那里我还声明了我的私有IDocumentRepository\u documentRepo=新的DocumentRepository_documentRepo.DoStuff;这看起来真的很奇怪,将应用程序逻辑和存储库放在一个类中似乎表示层和数据访问边界正在模糊…@Bluna:我不知道是否总是做错事。代码隐藏==视图。如果它是特定于视图的,则可以将其放在代码后面,只要它不会太多工作/太混乱,无法放在XAML中。啊,我添加示例代码时,你的帖子是在4秒前发布的:P我不能将此代码放在XAML中,因为它不起作用…@Bluna:我喜欢将视图视为一次性代码。如果您想在任何给定的时间点呈现另一个视图,您希望保留哪些代码?无论视图是什么,如果不是删除代码,您似乎总是想要这个,所以它应该放在视图模型中。对于示例代码,我的意思是这不是我的代码,只是一个示例…;-我认为对于DepProp实现的控件越差,MVVM就越难实现。所选文本上的文本装饰只能通过textblock.textEditions检索,我不认为我用诸如textblock之类的UI元素污染了我的ViewModel。。。