问题标签 [caliburn.micro]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2063 浏览

ioc-container - 如何销毁使用 MEF 创建的对象

嗨,我在 WPF 应用程序中使用 MEF 和 caliburn.micro。我想知道如何销毁使用 MEF 创建的实例。

例如简单的外壳:

第一个屏幕

第二屏:

WPF 应用程序从与 ILogOnViewModel 接口关联的第一个屏幕开始。然后我停用此屏幕并激活与 IMessengerViewModel 界面关联的第二个屏幕。

我使用 ANTS Mememory 分析器检查内存使用情况,但 ILogOnViewModel 的实例仍然存在,用户类的实例也存在。

我是 IoC 的新手,DI ......所有使用 MEF 导出的类都必须在整个 WPF 应用程序生命周期中存在?

其他示例,我使用窗口管理器创建新的 wpf 窗口。

ChatViewModel 是 WPF 窗口。

创建 IChatViewModel 的实例:

然后我关闭(单击窗口上的 X(关闭)按钮)WPF 窗口,ChatViewModel 已停用,但此类的实例仍然存在。

它存在方式如何杀死/销毁这个实例?

0 投票
1 回答
9064 浏览

wpf - WPF 中 .NET (Rx) 的响应式扩展 - MVVM

我在我的 WPF 应用程序中使用带有 Caliburn.Micro 的 NET (Rx) 响应式扩展。我正在尝试移植我的 WPF 应用程序以使用 MVVM 架构,并且我需要监视 TextBox 控件的 Text 属性的更改。

如果 Text 属性的最后一次更改是在 3 秒之前,我需要调用服务的 LoadUser 方法。

使用 MVVM 架构将逻辑从我的旧解决方案移植到新解决方案。

老的

XAML:

后面的代码中我有这个:

我想在我的视图模型类中使用 Observable.FromEvent 。像这样的东西

带有 MVVM 的 WPF

看法:

查看型号:

我的问题是 Observable.FromEvent 使用 TextBox 控件,我不知道如何从 ViewModel 类访问该控件。

我可以绑定到 TextBox 的 Text 属性,也可以将命令绑定到 TextBox 控件的某个事件,但此方法使用视图中的对象。

感谢您的想法。

0 投票
1 回答
2472 浏览

wpf - MEF 的问题 - ExportFactory在 Caliburn.Micro

我在 Caliburn.Micro 中使用 MEF 导出视图模型类。我想使用 ExportFactory 类而不是 Export 属性,因为我尝试解决与此处所述相同的问题: MEF 的对象破坏问题

我尝试解决这个问题,例如:

一些视图模型 - WPF 窗口:

我在其他一些视图模型类中使用窗口管理器打开聊天屏幕:

然后我关闭屏幕,但这个类的对象还活着。我尝试与此处描述的相同的问题: MEF 的对象破坏问题

我有视图模型 - 它是 WPF 窗口

场景/解决方案

我有 3 个视图模型/屏幕:

  • LogOnViewModel - 用户控制
  • MessengerViewModel - 用户控件
  • ChatViewModel - WPF 窗口

这些视图模型的代码在这里:

我的外壳看起来像这样:

我想使用 ExportFactory 类来创建视图模型类。我尝试实现与此处相同的逻辑:http: //mef.codeplex.com/wikipage?title= PartCreator

所以我为创建视图模型类创建了自己的控制器:

这是它:

我在这些类中导入 ViewModelsControler 类:

  • 外壳视图模型
  • MessengerViewModel

并希望在创建视图模型类上使用 ViewModelsControler 类的方法。- 项目清单

我不知道我做错了什么,如果我尝试编译这段代码,我会得到这个错误:

找不到合同 Spirit.ViewModels.IShellViewModel 的任何实例。Staktrace:在 C:\Users\Jan\Documents\Visual Studio 2010\Projects\C#\Pokec_Messenger\ver.beta\Pokec__Messenger\Spirit_Caliburn_Micro_v1.0\BootStraper\MefBootStrapper 中的 Spirit.BootStraper.MefBootStrapper.GetInstance(Type serviceType, String key) .cs:Caliburn.Micro.IoC.GetT 中的第 59 行:\Users\Jan\Documents\Visual Studio 2010\Projects\C#\Pokec_Messenger\ver.beta\Pokec__Messenger\Caliburn_Micro_Completed\CaliburnMicro\src\Caliburn.Micro.Silverlight \IoC.cs:Caliburn.Micro.Bootstrapper`1.DisplayRootView() 的第 33 行:\Users\Jan\Documents\Visual Studio 2010\Projects\C#\Pokec_Messenger\ver.beta\Pokec__Messenger\Caliburn_Micro_Completed\CaliburnMicro\src \Caliburn.Micro.Silverlight\Bootstrapper.cs:Caliburn.Micro.Bootstrapper.OnStartup 的第 175 行(对象发送者,

如果我在创建视图模型类上使用 Export 属性,效果很好。

像这样的东西:

和外壳:

哪里可能有问题?在 MEF 助推器类中?我使用经典的 MEF boostrape: http ://devlicio.us/blogs/rob_eisenberg/archive/2010/07/08/caliburn-micro-soup-to-nuts-pt-2-customizing-the-bootstrapper.aspx

感谢您的建议,您的时间和帮助。

0 投票
1 回答
1703 浏览

c# - 在 Caliburn.Micro 中使用 MEF 导出 - 增加内存问题

我有增加内存的问题。我在 caliburn.micro 中使用 MEF 创建新屏幕 - WPF 窗口。

屏幕/视图的视图模型如下所示:

在创建时我使用 ExportFactory,控制器在这里:

我在 ChatScreenManager 类中使用 ViewModelsControler 类。此类打开/删除聊天屏幕。

就这个:

我的问题是:

  • 我从 ChatScreenManager 调用 OpneChatScreen 方法打开新的 WPF 窗口
  • 将此窗口上的引用添加到字典。
  • 当我关闭窗口时,我调用 RemoveChatScreen。

在 RemoveChaScreen 中:

  • 我得到总内存,例如是 37,000K
  • 然后我在 ExportLifetimeContext chatScreen 上调用 Dipose 方法
  • 强制GC
  • 并获取总内存,例如是 39,000K

内存使用量仍在增加。我希望如果我在对象 ChatViewModel 和 ChatView 对象上调用 Dispose 方法,这些对象都会被销毁。

0 投票
2 回答
3822 浏览

wpf - 在 shell 视图模型类 [Caliburn.Micro] 的属性上绑定 WPF 窗口标题的问题

我在 WPF Window 的 Title 属性上的 shell 视图模型类中的绑定属性有一个简单的问题 - 它是 shell。

我的外壳视图如下所示:

外壳视图模型类:

如果我运行外壳视图(WPF 窗口)的应用程序标题为 Namespace.ShellViewModelClass,则外壳视图模型类中没有属性标题的值。

如果我在 shell 视图中激活某个屏幕,则窗口的 Title 属性是 Namespace.ViewModelClass。

我怎样才能消除这种行为?感谢您的建议。

0 投票
3 回答
1301 浏览

silverlight - 使用Caliburn Micro和WP7调用地图控件的方法

我的 Windows Phone 7 应用程序中有一个使用 Silverlight Map 控件的页面(视图)。

我需要在控件上调用SetView方法,但我想坚持在视图模型中保留功能的 MVVM 风格。

我计划在单击应用程序栏按钮后调用此方法,因此我无法通过 EventArgs 参数访问 Map。

最好的方法是什么?

0 投票
1 回答
185 浏览

silverlight - Caliburn 是否需要给定对象的元素约定才能将它的 ViewModel 实例映射到 View 实例?

我正在尝试将 ViewModel 中的 Canvas 对象映射到 View 中的 Canvas 对象。

但是,我在运行时收到“用户代码未处理 CompositionException”错误。在 ViewModel 中注释掉我的 Canvas 对象可以防止错误,所以我猜 Caliburn 正在尝试映射它并引发错误。

0 投票
1 回答
775 浏览

wpf - 视图模型调用中的调用方法需要/消耗大量时间

嗨,我尝试解决这种情况。我有 MVVM 设计的 WPF 应用程序。我使用 Caliburn Micro 框架和注入 MEF。

在 WPF 应用程序中,我使用来自外部程序集的服务。它运作良好。

问题是。我将可观察字典绑定到列表框。列表框可以包含 0 到 400 个项目。我在列表框项目上有数据模板,它由图像和 som texbox 组成。列表框就像 Skype 或 google talk 中的联系人列表。

我从服务中调用每 3-4 秒的方法,将新数据作为字典返回。用这个数据 aj 刷新 Listbox。

我的代码在视图模型中看起来像这样:

正如我所说,问题是服务中的 GetFriends 方法需要花费大量时间,并且我的应用程序冻结了。

如何解决这个问题?在 winforms 应用程序中,我使用后台工作程序,但这是我的第一个带有 MVVM 的 WPF 应用程序。它存在任何“模式”或“设计”如何调用在视图模型类中消耗大量时间的方法?在另一个线程中调用此方法?

0 投票
4 回答
32084 浏览

c# - 必须在与 DependencyObject 相同的线程上创建 DependencySource

我将可观察字典从视图模型绑定到视图。我使用 Caliburn 微框架。

看法:

来自视图模型类的代码。

属性如下所示:

在调度程序计时器中,我每 3 秒在单独的线程新服务方法中调用一次。

所以我的视图模型构造函数我有这个:

Timer tick 方法在这里:

当我运行应用程序时,出现此错误:

我尝试更换调度员:

这个 _threadDispatcher = Dispatcher.CurrentDispatcher;

有了这个: _threadDispatcher = Application.Current.Dispatcher;

但这无济于事。感谢您的建议。

MyObservableDicionary 不是依赖对象或具有依赖属性:

0 投票
2 回答
551 浏览

wpf - 在视图模型类中注入许多类

我用 MVVM 设计开发 wpf 应用程序。作为 MVVM 框架,我使用 Caliburn Micro。我在外部程序集中拥有的服务,它被注入到带有 MEF 的视图模型类中。

服务中的问题我有很多小班,我尽量尊重 SOLID 原则。

班级数约为 12-15。

我需要在视图模型类中使用这些类。所以我用这个:

我不认为这种方式是正确的。或者它存在一些优雅、简单的东西。感谢您的意见和建议。