使用WPF / MVVM在运行时动态更改UserControl内容

新西兰詹姆斯

我尝试创建的屏幕是一个多部分的结果查看器。批处理作业完成后,您可以双击它并打开此屏幕,其中将包含有关刚刚运行的批处理作业的基本数据的顶部(屏幕顶部的30%,全角),然后是下部70%将由左对齐的列表框(宽度的20%)和一个Sub-Results(子结果)选项组成,而Detail窗格将占据其余80%的宽度。

我希望它的行为方式是当您在左侧列表框中选择“子结果”时,右侧窗格将填充子结果的详细信息。因为它将变得很复杂并且需要可伸缩,所以我想将每个子结果详细信息显示面板实现为UserControl。

父级ViewModel包含一个IDictionary<Enum.ResultType, IResultPanel>-,该字典的键将填充列表框,当您选择一个选项时,它将从该字典中获取IResultPanel对象,该对象将是User Control,下面是一个示例片段

public partial class SimpleCalcInfoResult : UserControl, IResultPanel
    {
        private SimpleCalcInfoResultViewModel _viewModel;

        public SimpleCalcInfoResult(SimpleCalcInfoResultViewModel viewModel)
        {
            InitializeComponent();
            _viewModel = viewModel;
        }
    }

IResultPanel接口是一个空白的空接口,仅用于促进能够使用通用类型的Dictionary,因为我觉得UserControls的字典太宽泛了。

我遇到的问题是我不知道要在父控件中使用哪种XAML来具有可变的UserControl面板。显然你可以拥有

<local:MyControl> ... </local:MyControl>

作为硬编码的用户控件,但是我如何拥有XAML的一部分,让我可以根据选择的ListBox项来更改显示的用户控件?

谢里登

使用WPF可以轻松实现。但是,在使用MVVM时,我们“操纵”数据而不是UI控件。考虑到这一点,请首先在本节中DataTemplate为每个自定义控件声明一个PanelApplication.Resources

<DataTemplate DataType="{x:Type ViewModels:SimpleCalcInfoResultViewModel}">
    <Views:SimpleCalcInfoResult />
</DataTemplate>
...
<DataTemplate DataType="{x:Type ViewModels:MainViewModel}">
    <Views:MainView />
</DataTemplate>

现在,您所要做的就是使用ContentControl在右下方显示相关的视图模型

<ContentControl Content="{Binding ViewModel}" />

最后,将类型IResultPaneltype的属性添加ViewModel到父视图模型:

private IResultPanel viewModel = new FirstViewModel();

public IResultPanel ViewModel
{
    get { return viewModel; }
    set { if (viewModel != value) { viewModel = value; NotifyPropertyChanged("ViewModel"); } }
}

现在,您需要Panel在应用程序中显示不同的所有内容,就是将此属性设置为其他值:

ViewModel = new SimpleCalcInfoResultViewModel();

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

WPF / MVVM在运行时动态加载视图

来自分类Dev

使用WPF-MVVM在运行时扩展所有WPF TreeView节点

来自分类Dev

使用WPF-MVVM在运行时扩展所有WPF TreeView节点

来自分类Dev

WPF:在运行时动态更改DataGrid单元格/行背景色

来自分类Dev

使用JNDI在运行时动态更改项目阶段的值

来自分类Dev

使用JNDI在运行时动态更改项目阶段的值

来自分类Dev

WPF:如何在运行时更改行为?

来自分类Dev

使用Webpack在运行时动态要求JS文件

来自分类Dev

在运行时使用动态名称创建Qlabel

来自分类Dev

在运行时使用动态参数调用 printf

来自分类Dev

在运行时使用GenericTypeArgument更改类型

来自分类Dev

使用javassist + spring + tomcat在运行时更改类

来自分类Dev

使用Gunicorn运行时如何在运行时更改flask配置变量

来自分类Dev

在运行时 WPF 上画线

来自分类Dev

Wpf 在运行时加载 dll

来自分类Dev

WPF MVVM 切换按钮在运行时启用/禁用

来自分类Dev

WPF动画GIF源更改在运行时..但在源更改时保持静态

来自分类Dev

WPF动画GIF源更改在运行时..但在源更改时保持静态

来自分类Dev

如何在运行时将动态资源分配给WPF代码中的按钮

来自分类Dev

WPF如何在运行时修改项目文件夹中的资源/内容文件(不在bin目录中)?实施“最近的更改”部分

来自分类Dev

从 UserControl 动态更改 WPF 窗口中的内容

来自分类Dev

WPF文本块无法在运行时显示属性更改

来自分类Dev

WPF全局样式,可在运行时更改而无需设置DynamicResource

来自分类Dev

在运行时更改选项卡项标题(WPF、c#)

来自分类Dev

在运行时更改/切换 WPF 文本框的文本数据绑定

来自分类Dev

在 wpf C# 中在运行时更改标签文本

来自分类Dev

是否可以在运行时或编译时更改SSDL内容(Visual Studio 2015 EntityFramework数据库首先与Oracle结合使用)

来自分类Dev

使用ASP.NET MVC 4在运行时动态应用验证规则

来自分类Dev

在运行时使用动态泛型参数转换泛型

Related 相关文章

  1. 1

    WPF / MVVM在运行时动态加载视图

  2. 2

    使用WPF-MVVM在运行时扩展所有WPF TreeView节点

  3. 3

    使用WPF-MVVM在运行时扩展所有WPF TreeView节点

  4. 4

    WPF:在运行时动态更改DataGrid单元格/行背景色

  5. 5

    使用JNDI在运行时动态更改项目阶段的值

  6. 6

    使用JNDI在运行时动态更改项目阶段的值

  7. 7

    WPF:如何在运行时更改行为?

  8. 8

    使用Webpack在运行时动态要求JS文件

  9. 9

    在运行时使用动态名称创建Qlabel

  10. 10

    在运行时使用动态参数调用 printf

  11. 11

    在运行时使用GenericTypeArgument更改类型

  12. 12

    使用javassist + spring + tomcat在运行时更改类

  13. 13

    使用Gunicorn运行时如何在运行时更改flask配置变量

  14. 14

    在运行时 WPF 上画线

  15. 15

    Wpf 在运行时加载 dll

  16. 16

    WPF MVVM 切换按钮在运行时启用/禁用

  17. 17

    WPF动画GIF源更改在运行时..但在源更改时保持静态

  18. 18

    WPF动画GIF源更改在运行时..但在源更改时保持静态

  19. 19

    如何在运行时将动态资源分配给WPF代码中的按钮

  20. 20

    WPF如何在运行时修改项目文件夹中的资源/内容文件(不在bin目录中)?实施“最近的更改”部分

  21. 21

    从 UserControl 动态更改 WPF 窗口中的内容

  22. 22

    WPF文本块无法在运行时显示属性更改

  23. 23

    WPF全局样式,可在运行时更改而无需设置DynamicResource

  24. 24

    在运行时更改选项卡项标题(WPF、c#)

  25. 25

    在运行时更改/切换 WPF 文本框的文本数据绑定

  26. 26

    在 wpf C# 中在运行时更改标签文本

  27. 27

    是否可以在运行时或编译时更改SSDL内容(Visual Studio 2015 EntityFramework数据库首先与Oracle结合使用)

  28. 28

    使用ASP.NET MVC 4在运行时动态应用验证规则

  29. 29

    在运行时使用动态泛型参数转换泛型

热门标签

归档