C#WPF中的Prism入门--------基础应用 (个人笔记)
作者:互联网
**----拓展用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