ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C#WPF中的Prism入门--------基础应用 (个人笔记)

2022-04-13 08:32:50  阅读:190  来源: 互联网

标签:-------- ViewModel C# 绑定 value Prism IOC View


**----拓展用GearedValues的集合 处理livechart的速度 会比ChartValue集合的速度优化会好很多
IOC是什么;
IOC 不是适应谁 是一种工具 是一个容器 中文名:控制反转 =>需要什么对象,就创建什么对象

Prism版本问题:
Prism从8.0开始大变化 Prism有两个 wpf的IOC容器 Prism.DryIoc / Prism.Unity 一个项目中选择其中的一个
DryIoc 比 Unity 性能高一点

Prism.Core:是Prism的主要核心代码(与UI框架无关)
Prism.WPF:(跟UI层相关 表现层)
Prism.Unity(IOC 容器 选择Unity) 如果选择DryIoc IOC容器 那就是选择Prism.DryIoc

安装Prism框架
第一步
NuGet上面安装 上面三个 Prism.Core 以及 Prism.WPF 还有 选择的IOC容器 在这边使用Unity

第二步
在APP.Xaml 那边 xmlns:prism="http://prismlibrary.com/" 之后 将 原本的 <APPlication APPlication/> 改造成为
<prism:PrismApplication><prism:PrismApplication/> 之后删除StartupURi 因为要在别的地方启动主页面程序

第三步
在APP.Xaml.cs 将继承的Application 替换成 PrismApplication 并且 实现抽象类
会有两个实现的 CreateShell() 以及RegisterTypes(IContainerRegistry containerRegistry) 两个方法

还有一个特殊的方法 可以用来做登录页面的时候使用 可以在注册完MainWindow之前 可以先打开一个页面
protected override void InitializeShell(Window shell)
{
if(Container.Resolve<LoginView>().ShowDialog()==false)
{
Application.Current?.Shutdown();
}
else
base.InitializeShell(shell);
}

两个方法的解释:
CreateShell() : 创建一个 入口窗口程序 //起始窗口
protected override Window CreateShell()
{
//为了满足 对象的实例注入
return Container.Resolve<MainWindow>();
}

RegisterTypes(IContainerRegistry containerRegistry)
用来注册 页面 还有 加入到 IOC容器里面的 东西

##########################################

Prism框架的基础使用 Views 与 ViewModel 的相互绑定

第一步:在建立相互绑定之前 需要在View窗口 那边 引用命名空间
xmlns:prism="http://prismlibrary.com/"

prism:ViewModelLocator.AutoWireViewModel="True" // 在我们的项目里面 按照特定的规则(需要名字View的全程+ViewModel) 将我们的ViewModel 注入到我们的View里面来


第二步 :目录约定: 创建 一个 Views文件夹 以及ViewModels文件夹
将对应的View 以及 对应ViewModel 放入其中
命名约定: ViewModels 内的ViewModel 名字 必须是对应的View的名字 + ViewModel
例如: Views=> MainWindow ViewModels=>MainWindowViewModel 这样才可以寻找到
MainWindowViewModel 中绑定的必须是属性

第三步: 实现Viewmodel 的属性改变后 UI层那边也改变
需要继承BindableBase
例如: private string _value;

public string Value
{
get { return _value; }
set { _value = value; }
}

需要变更为
private string _value ;

public string Value
{
get { return _value; }
set { SetProperty( ref _value, value);
}
}

使用里面的方法SetProperty() ( MVVMlight里面的 通知属性类似)

也可以不只是单纯的通知 View页面的Value 也可以在SetProperty 通知另外一个属性也变更
set { SetProperty( ref _value, value,"另外属性值");// 特殊情况


第一步:绑定事件 实现Command 绑定
必须要一个 属性 那个属性必须是 ICommand类型的
例: public ICommand ClickCommand
{
get =>new DelegateCommand<object>("!!! 这边需要一个 无返回值的方法用来实现Command的内容的方法 !!! ");;

}
并且这个方法 必须 new DelegateCommand<object> 是要拥有 object这个类型参数的 一个无返回值方法
例如: private void ClickButton(object a)
{
........
}
这个 object a 的值 会是 CommandParameter 绑定的参数 下面给的是 123 那这边执行之后 这个 object a 就是123
前台在Button 上绑定Command
<Button Command="{Binding ClickCommand}"
CommandParameter="123" /> CommandParameter 绑定的给的事件参数

ObservesCanExecute 可以通过这个 来判断按钮的执行情况 当他返回false 的时候 我们绑定的这个按钮 就不能执行//变灰了
例如:
public ICommand ClickCommand
{
get => new DelegateCommand<object>(ClickButton).ObservesCanExecute() => IsEnable);

}
还要在Value属性那边使用特殊重载 使用 ()=>{
this.IsEnable=Value!="";

};


例如: private bool _isEnable;

public bool IsEnable
{
get { return _isEnable; }
set { SetProperty(ref _isEnable, value); }
}

搜索

复制

标签:--------,ViewModel,C#,绑定,value,Prism,IOC,View
来源: https://www.cnblogs.com/PrograMMer-Ben/p/16138518.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有