WPF / C#/ MVVM:需要一些帮助实现用户控件的自定义视图选项

时间:2010-10-29 05:08:31

标签: c# wpf mvvm options

我目前正在处理的项目是文本编辑器类型的应用程序。我想知道如何处理自定义视图选项。例如。我TextBox的字体系列,大小,粗体和颜色。我的编辑器选项卡是视图中的EditorTabViewModel,是自定义用户控件MarkdownEditor。它基本上是一个文本框,带有一些粗体/斜体等按钮。我想知道如何以某种方式设置自定义用户控件/编辑器的选项,就像我的应用程序的OptionsView一样?

我渲染编辑器的方式是

<Window.Resources>
    <DataTemplate DataType="{x:Type vm:EditorTabViewModel}">
        <me:MarkdownEditor />
    </DataTemplate>
</Window.Resources>

MarkdownEditor是一个用户控件,用于公开显示属性以设置字体,颜色等。

更新:也是因为应用中可能有很多MarkdownEditor,我希望选项是全局的

1 个答案:

答案 0 :(得分:2)

没有什么可以阻止您在ViewModel中使用View构造...尤其是如果您将ViewModel视为View的模型(而不是模型的视图)。并非所有纯粹主义者都认为这是一个好主意。然而,大多数实用主义者都这样做。

EditorTabViewModel中拥有FontWeight,FontColor,FontSize等属性对您有用,然后您可以在MarkdownEditor的属性中绑定它们。它允许您通过ViewModel动态更改文本的UI属性。

如果您是纯粹主义者,并且您不希望ViewModel知道WPF特定的View构造,您可以创建自己的文本格式化类,称为TextFormattingTextFormatting可以包含您自己要表达的信息表示(粗体,斜体,颜色,字体大小等)。然后,您可以使用附加的属性/行为将TextFormatting对象绑定到MarkdownEditor。附加的属性/行为将负责将格式化表示映射到WPF表示。

如果您有不同的View(WinForms / WPF)可能使用相同的ViewModel,那么第二种方式非常有用,因为它仍然与视图引擎无关。它还增加了第一个选项不具备的复杂性。