Tag: prism

如何在PRISM模块中使用ReactiveUI

我们有一个现有的WPF应用程序,它使用PRISM(6.x)和Unity(3.5.x)进行DI。 我们将为此应用程序添加更多function,并希望开始将ReactiveUI用于我们需要实现的任何新模块。 我们希望尽量减少学习曲线并继续为ViewModels使用Unity和DI; 但是,ReactiveUI使用Splat for View位置,到目前为止,我无法让我的ReactiveUI模块实际显示在我们的主应用程序中的PRISM区域,无论我尝试过什么。 我真正找到的唯一一篇文章就是这篇文章在ReactiveUI中的IMutableDependencyResolver和Structuremap问题,其中有人正在编写自己的集成。 所以给出了一些ViewModel: public class HelloWorldViewModel : ReactiveObject { string title = “Hello ReactiveUI”; public string Title { get { return title; } set { this.RaiseAndSetIfChanged(ref title, value); } } } 及其相应的观点: 以及实现IViewFor接口背后的视图代码: public partial class HelloWorldView : UserControl, IViewFor { public HelloWorldView() { InitializeComponent(); this.WhenAnyValue(x => x.ViewModel).BindTo(this, x => […]

使用MVVM体系结构从SignaturePadView检索图像

我正在使用MVVM架构中的Prism框架开发Xamarin.Forms应用程序。 我需要从屏幕上收集签名,所以我决定加入SignaturePad库。 使用NuGet,我包括Xamarin.Controls.SignaturePad和Xamarin.Controls.SignaturePad.Forms包。 在页面布局中(使用XAML构建)我有签名小部件: 在ViewModel中,小部件绑定: private SignaturePadView _sign; public SignaturePadView Sign { get { return _sign; } set { SetProperty(ref _sign, value); } } 在ViewModel构造函数中: _sign = new SignaturePadView(); 还有一个按钮,在这个按钮的动作中我需要读取符号图像并将其保存到数据库中。 我试过这个: Stream sig = await Sign.GetImageStreamAsync(SignatureImageFormat.Png); var signatureMemoryStream = sig as MemoryStream; byte[] data = signatureMemoryStream.ToArray(); 所有这些代码都写在便携式项目中。 不幸的是,它不起作用,因为sig对象始终为null。 我认为问题是小部件绑定但我不确定。

注册区域到在棱镜中添加区域有什么区别?

我想创建一个具有动态视图的区域(一个区域中有多个视图)。 需要通过ComboBox选择事件更改区域内容(comobox项目是视图实例)。 我希望ComboBox中的更改将通过所选视图项更改区域中的视图。 我的问题是什么区别: MyView view= new MyView(); IRegion region = new Region(); region.Name=”MyRegion”; regionManager.Regions.Add(region); region.Add(view); region.Activate(view); 至: regionManager.RegisterViewWithRegion(“MyRegion”,type(MyView)); ? 使用动态区域的最佳方法是什么?

使用primitive-arguments构造函数注册一个类型?

我有一个类在其构造函数中有一些原始类型参数,如字符串等。 我应该如何使用统一容器注册类型? public LoginManager( IRegionManager regionManager, IEventAggregator eventAggregator, string mainRegionName, Uri login, Uri target) { this.regionManager = regionManager; this.eventAggregator = eventAggregator; this.mainRegionName = mainRegionName; this.login = login; this.target = target; } } 更新 : 请记住, IRegionManager和IEventAggregator是Prism UnityBootstrapper的已知类型,在我的情况下是容器包装器。 我必须重新注册吗? 我想保持类型注册尽可能简单。 这会被视为坏习惯吗? 有更好的选择吗?

使用Unity使用额外参数创建对象

我正在使用Prism,它也是很好的Unity IoC容器。 我是这个概念的新手,所以我还没有完全掌握它。 我现在要做的是使用IoC容器创建一个对象,但也传递一个额外的参数。 请允许我用一个例子解释..: 我有一个接受命令对象的类。 这是在IoC容器中注册的,因此它可以很好地处理它: public class Person { public Person(IApplicationCommands commands) { .. } .. } Person person = _container.Resolve(); 现在 – 我想传递另一个论点 – 例如这个人的名字。 但是,我仍然希望使用IoC容器来处理解析,从而从IoC容器中获取其他参数。 但是将名称作为“自定义”参数传递。 可以这样做吗? public class Person { public Person(IApplicationCommands commands, string name) { .. } .. } string name = “John”; Person person = _container.Resolve(name); // ….?? […]

Prism实际上为开发人员提供了什么? 它值得吗?

简单实用的术语,Prism提供什么,值得吗? 我对MS的应用程序开发框架(例如Enterprise Library)的体验是,它们通常过于复杂,重量级,并迫使您将应用程序耦合到不提供大量数据且以后无法轻易切换的组件。 人们在现实世界中使用棱镜的观点和经验是什么?

棱镜4:RequestNavigate()不起作用

我正在构建一个演示应用程序来学习Prism 4的导航function。该应用程序有两个模块 – 每个模块有三个视图: 带有文本块的UserControl(“欢迎使用模块A”) RibbonTab(使用区域适配器),和 Outlook样式的任务按钮(如Outlook的邮件,日历等) Shell有三个命名区域:“RibbonRegion”,“TaskButtonRegion”和“WorkspaceRegion”。 视图加载到这些区域。 为了测试基本设置,我使用Prism Region Manager注册了所有三个视图,以便它们在启动时加载,并且所有操作都按预期工作。 接下来,我修改了设置,以便在启动时只加载任务按钮。 其他视图仅在请求时加载,方法是单击任务按钮。 我的模块初始化器看起来像这样: public void Initialize() { /* We register the Task Button with the Prism Task Button Region because we want it * to be displayed immediately when the module is loaded, and for the lifetime of * the application. */ // […]

使用MEF从shell加载prism模块视图

我有一个shell项目,它将我的引导程序中的模块加载到我的shell主视图中的选项卡控件中。 我刚刚在我的标签项上实现了一个关闭按钮,现在提出了如何从shell重新加载模块视图的问题? 尝试使用 moduleManager.LoadModule(“ModuleA”); 但这仅在首次加载模块时有效。 当我调用上面的内容时,它会加载并初始化模块,显示视图。 如果我然后再次关闭视图,第二次我尝试这个它不会重新显示视图(我猜它不会重新初始化模块,因为它已经加载)。 所以,我虽然考虑过在shell中使用以下内容: var moduleAView = ServiceLocator.Current.GetInstance(); regionManager.Regions[“TabRegion”].Add(ModuleAView); regionManager.Regions[“TabRegion”].Activate(ModuleAView); 这种方法的问题是我的shell如何知道第1行中的ModuleAView类型? 我没有对模块A的引用,也不想添加模块。 我想到了ModuleAView将实现的一个通用接口,它可以在模块和shell之间共享,但是在尝试使用上面的ServiceLocator.GetInstance方法时遇到了组合错误。 非常感谢您的帮助。 PS这是我试过的模块A模块代码。 [ModuleExport(typeof(ModuleA), InitializationMode = InitializationMode.OnDemand)] [Module(ModuleName=”ModuleA”)] public class ModuleA : IModule { private IRegionManager _regionManager; [ImportingConstructor] public ModuleA(IRegionManager regionManager) { this._regionManager = regionManager; } public void Initialize() { // add the search view to the region manager. […]

Prism事件聚合器不在单独的模块中工作

我遇到了棱镜事件聚合器的问题。 如果我订阅,并在同一模块中发布一个事件,它工作正常。 像这样 – public class InfrastructureModule : IModule { private IEventAggregator eventAggregator; public InfrastructureModule(IEventAggregator eventAggregator) { this.eventAggregator = eventAggregator; eventAggregator.GetEvent().Subscribe(TestSub); } public void Initialize() { eventAggregator.GetEvent().Publish(“Infrastructure module”); } private void TestSub(string s) { MessageBox.Show(s); } } 但是,如果我在另一个模块中订阅该事件,则在调用eventAggregator.GetEvent()。Publish()时没有任何反应 – public class OtherModule : IModule { private IEventAggregator eventAggregator; public OtherModule (IEventAggregator eventAggregator) { this.eventAggregator = […]

WPF:对于小型应用程序Prism是否过度杀伤?

如果我不将我的应用程序拆分成不同的模块(否则我会认为Prism将是defo是要走的路)我应该使用Prism吗? 我知道Prism提供了一个方便的ICommand实现(我可以在代码页中自己完成)并给我们IEventAggregator但所有Bootstrapper,Shell,ModuleCatalog的东西真的有用吗? 为什么不使用MVVM模式(没有Prism)来分离你的顾虑,这样你的应用程序才是可测试的,Bob就是你的叔叔!