惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

GbyAI
GbyAI
The GitHub Blog
The GitHub Blog
小众软件
小众软件
美团技术团队
博客园 - 司徒正美
G
Google Developers Blog
Blog — PlanetScale
Blog — PlanetScale
Hugging Face - Blog
Hugging Face - Blog
博客园_首页
大猫的无限游戏
大猫的无限游戏
罗磊的独立博客
Recent Announcements
Recent Announcements
酷 壳 – CoolShell
酷 壳 – CoolShell
D
Docker
J
Java Code Geeks
Last Week in AI
Last Week in AI
V
Visual Studio Blog
Microsoft Azure Blog
Microsoft Azure Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
P
Proofpoint News Feed
V
V2EX
C
Check Point Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
MyScale Blog
MyScale Blog

博客园 - 天涯

Prism BindableBase 和 Commands 的介绍 对 mvvm 架构的理解 wpf mvvm 架构 C#硬件开发业务流程调试技巧 wpf winform 截图 wpf Cannot locate resource 'app.xaml' app.config ConfigSection 保护 程序开发注意4项,你知道吗? .net 变量缓存,你知道吗 wpf 多线程 更新UI 界面 wpf treeview 绑定不同的对象 .net 技术,你掌握了多少 aspx 中确认删除 脚本 - 天涯 .net 中对类的扩展 奇怪--ORA-12154:TNS:无法处理服务名: 建模十条原则 由软件加壳谈起 Hashtable 应注意的 2 点 vb 调用c#做的com 组件
Prism.Interactivity 和 Prism.Modularity 介绍
天涯 · 2020-07-30 · via 博客园 - 天涯

Prism.Interactivity: 主要用来截取View即界面的一些处理,而这些功能通过vm 不好实现,只能用 CommandBehaviorBase 来截取处理,特别是在处理界面异常很有用。

定义如下:

  public class ValidationExceptionBehavior : Behavior<FrameworkElement>

// 方法体

}

使用:

界面错误信息的处理:

  <Interactivity:Interaction.Behaviors>                <common:ValidationExceptionBehavior></common:ValidationExceptionBehavior>

            </Interactivity:Interaction.Behaviors>

键盘事件的处理

   <Interactivity:Interaction.Triggers>

                <Interactivity:EventTrigger EventName="KeyDown">

                    <Interactivity:InvokeCommandAction Command="{Binding ButtonKeyDown}"

                                               CommandParameter="{Binding RelativeSource={RelativeSource  Mode=FindAncestor, AncestorType={x:Type Window}}}"/>

                </Interactivity:EventTrigger>

            </Interactivity:Interaction.Triggers>

注意界面要引用:

xmlns:Interactivity=http://schemas.microsoft.com/expression/2010/interactivity

Prism.Modularity: 模块定义,加载,管理

继承 IModule

 public class PositionModule : IModule

{

  // 其他内容

///必须实现 Initialize ,注册该模块中使用的服务,vm 等。提供主程序中使用。

    public void Initialize()

        {    

       .....

            this.container.RegisterType<IOrdersViewModel, OrdersViewModel>();

            this.container.RegisterType<IOrdersView, OrdersView>();

            this.container.RegisterType<IOrderCompositeViewModel, OrderCompositeViewModel>();

            this.container.RegisterType<IPositionSummaryViewModel, PositionSummaryViewModel>();

            this.container.RegisterType<IPositionPieChartViewModel, PositionPieChartViewModel>();

            this.regionManager.RegisterViewWithRegion(RegionNames.MainRegion,

                                                       () => this.container.Resolve<PositionSummaryView>());

            this._ordersController = this.container.Resolve<OrdersController>();

        }

}

主程序中使用方法:

在 Bootstrapper 中使用:

public class StockTraderRIBootstrapper : UnityBootstrapper

    {

        protected override void ConfigureModuleCatalog()

        {

            base.ConfigureModuleCatalog();

            ModuleCatalog moduleCatalog = (ModuleCatalog)this.ModuleCatalog;                   moduleCatalog.AddModule(typeof(StockTraderRI.Modules.Position.PositionModule));                     moduleCatalog.AddModule(typeof(StockTraderRI.Modules.News.NewsModule));

        }

        protected override DependencyObject CreateShell()

        {

            // Use the container to create an instance of the shell.

            Shell view = this.Container.TryResolve<Shell>();

            view.DataContext = new ShellViewModel();

            return view;

        }

        protected override void InitializeShell()

        {

            base.InitializeShell();

            App.Current.MainWindow = (Window)this.Shell;

            App.Current.MainWindow.Show();

        }

        protected override Prism.Regions.IRegionBehaviorFactory ConfigureDefaultRegionBehaviors()

        {

            var factory = base.ConfigureDefaultRegionBehaviors();

            return factory;

        }

}

 这是通过代码实现的,也可以通过 xml 配置文件实现

protected override IModuleCatalog CreateModuleCatalog() {     return ModuleCatalog.CreateFromXaml(new Uri("/MyProject;component/ModulesCatalog.xaml", UriKind.Relative)); }