wpf: Prism框架(1)安装,绑定支持,自动绑定view和viewModel


(一)安装Prism包,及vs的创建Prism项目模板


安装nuget包: Prism.DryIoc


安装Prism的项目模板:

image.png

关闭VS,会继续安装。

image.png

安装完成后,vs有了Prism的项目模板。


image.png

我们选择创建Prism Full   App(WPF), 在弹出来对话框中选择“DryIoc”容器,这个是默认值。

还有一个可选容器是Unity。

image.png

创建好的工程如下:

image.png

在这些项目中,执行程序上FullApp1,用的是.NET6.0, Tests是个单元测试项目,FullApp1.Core是类库,使用是.NET6.0
其它的类库都是引用的.net startdard2.0

也就是说,Prism Full   App(WPF) 这个模板是创建的.net Core项目,并不是.net Framework的项目。



(二)基本示例,切换模块


本例子演示目的:

1。 演示Prism的ViewModelLocator.AutoWireViewModel机制,它用于把view和viewModel自动绑定起来

2。 做为反面教程,突显后面讲解的Prism的区域功能。


由于Prism是MVVM的框架,继续之前勇哥先谈一个mvc和mvvm的不同之处:


MVVM

      Model,     承载数据

      View,      显示数据

      ViewModel     干活的


MVC

      Model     承载数据

      View    显示数据

      Control    干活的


两者看上去差不多,但是工作逻辑不一样

mvc中,是control干完活后交给View来显示。

在mvvm中不是这样的,它使用的一种数据绑定的机制,把view和viewModel绑定起来,

使得viewModel一更新则view会自动更新。

这种机制就是Prism的ViewModelLocator.AutoWireViewModel机制。


我们以第(一)节创建的Prism Full   App(WPF) 模板开始。


(2.1)先创建3个view,使用wpf用户控件


三个页面随便显示点文字,以示区别即可。

image.png


(2.2)创建view\MainWindow.xmal界面

我们的需求就是在这个界面里,点击模块按钮,会载入对应的模块。

image.png

对三个按钮及ContenControl控件做了Command的绑定。


    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="40"/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <StackPanel Orientation="Horizontal">
            <Button Command="{Binding OpenCommand}" CommandParameter="ViewA" Height="30" Width="70" Content="模块A" Margin="5"/>
            <Button  Command="{Binding OpenCommand}" CommandParameter="ViewB"  Height="30" Width="70" Content="模块B" Margin="5"/>
            <Button  Command="{Binding OpenCommand}" CommandParameter="ViewC"  Height="30" Width="70" Content="模块C" Margin="5"/>
        </StackPanel>
        <ContentControl Grid.Row="1" Content="{Binding Body}"/>
        <!--<ContentControl prism:RegionManager.RegionName="{x:Static core:RegionNames.ContentRegion}" />-->
    </Grid>


(2.3) MainWindowViewModel里添加功能

主要是添加是上面步骤中的两个Command绑定项目。

一个是OpenCommand,一个是Body。


	public class MainWindowViewModel : BindableBase
	{
		public DelegateCommand<string> OpenCommand { get; private set; }

		private string _title = "Prism Application";
		public string Title
		{
			get { return _title; }
			set { SetProperty(ref _title, value); }
		}

		private object body;
		public object Body
		{
			get { return body; }
			set
			{
				SetProperty(ref body, value);
			}
		}

		public MainWindowViewModel()
		{
			OpenCommand = new DelegateCommand<string>(Open);
		}

		private void Open(string obj)
		{
			switch (obj)
			{
			        //注意是Body,而不是body
				case "ViewA": Body = new ViewA(); break;
				case "ViewB": Body = new ViewB(); break;
				case "ViewC": Body = new ViewC(); break;
			}
		}
	}


运行:

image.png


本文源码下载:


链接:https://pan.baidu.com/s/13QK4Di-W7VKfYKu23hZ__A

提取码:w23k 

--来自百度网盘超级会员V6勇哥的分享



本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:
本帖最后由 勇哥,很想停止 于 2024-06-11 19:30:59 编辑

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2025年4月    »
123456
78910111213
14151617181920
21222324252627
282930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864