Tag: caliburn.micro

使用Caliburn.Micro MVVM WPF建议视图导航

我是Caliburn Micro的新手,想要了解我的应用程序界面和视图之间导航的路径。 我的想法是有一个MainWindow,它将包含一个按钮菜单,每个按钮与特定视图相关。 每个视图都将存储在单独的WPF UserControl中。 mainWindow还将包含一个TabControl,该TabControl绑定到viewmodel上的ObservableCollection选项卡。 每次单击菜单上的按钮时,我想添加一个内部有ContentPresenter的新选项卡,它将动态加载视图及其相应的视图模型。 所以我的问题: 1)我应该在这里使用屏幕collections吗? 2)UserControl应该实现Screen界面吗? 3)如何告诉MainWindow ViewModel在新添加的选项卡上加载哪个视图来维护viewmodels解耦? 感谢大家提前。 UPDATE 经过大量的阅读和社区的帮助后,我设法解决了这个问题。 这是由此产生的AppViewModel: class AppViewModel : Conductor.Collection.OneActive { public void OpenTab(Type TipoVista) { bool bFound = false; Screen myScreen = (Screen)Activator.CreateInstance(TipoVista as Type); myScreen.DisplayName = myScreen.ToString(); foreach(Screen miItem in Items) { if (miItem.ToString() == myScreen.ToString()) { bFound = true; ActivateItem(miItem); } } […]

在Caliburn Micro和Castle Windsor中处理ViewModels

我在Caliburn-Micro Silverlight应用程序中使用Castle-Windsor作为我的容器。 我的ViewModel对象相当粗糙,因为它们调用WCF服务和其他一些东西。 因此,当窗口关闭时,我想调用container.Release(viewModel),以便Castle可以管理整个退役/处置过程,尊重配置的各种生命周期(如本文所述)。 在我的AppBootstrapper中,我重写了GetInstance,如下所示: protected override object GetInstance(Type serviceType, string key) { if (string.IsNullOrEmpty(key)) return container.Resolve(serviceType); return container.Resolve(key, serviceType); } 但我正在努力想出一个干净/优雅的方式来调用container.Release(viewModel) 。 似乎没有任何钩子可用于此。 在Caliburn Micro应用程序中释放从ViewModelLocator返回的ViewModel对象的最简单方法是什么?

Caliburn.Micro嵌套了ViewModels的最佳实践

这是一个很长的问题,所以请耐心等待。 目前我正在开发一个小工具,旨在帮助我跟踪我的故事中无数的角色。 该工具执行以下操作: 将当前存储为json的字符加载到磁盘上,并将它们存储在列表中,该列表通过ListBox在Shell中显示。 如果用户随后打开一个字符,那么Shell是一个Conductor.Collection.OneActive ,它将打开一个新的CharacterViewModel ,它派生自Screen 。 Character获取将通过IEventAggregator消息系统打开的IEventAggregator 。 CharacterViewModel还具有各种属性,这些属性是绑定到各种子视图的子ViewModel。 这是我的问题:目前我在初始化ChracterViewModel时手动初始化子ViewModels。 但这对我来说听起来很可疑,我很确定有更好的方法可以做到这一点,但我看不出应该怎么做。 这是CharacterViewModel的代码: /// ViewModel for the character view. public class CharacterViewModel : Screen, IHandle<DataMessage> { // ——————————————————————————————————————– // Fields // ——————————————————————————————————————- /// The event aggregator. private readonly IEventAggregator eventAggregator; /// The character tags service. private ICharacterTagsService characterTagsService; // ——————————————————————————————————————– // Constructors & Destructors […]

Silverlight + MVVM + Bindings =内存泄漏?

到目前为止,我的测试表明,在Silverlight中利用MVVM模式的所有标准方法,示例和框架都存在一个巨大的问题:大量内存泄漏会阻止VM被垃圾回收。 显然这是一个巨大而荒谬的主张 – 所以我的期望是有人会明白我为什么以及在哪里出错:) 重现的步骤很简单: 通过将视图datacontext设置为VM,将viewmodel绑定到视图(假设viewmodel利用INotifyPropertyChanged来支持数据绑定) 将UI元素绑定到viewmodel上的属性,例如: 以某种方式利用绑定(例如 – 只需键入文本框)。 这将创建一个从根,BindingExpression扩展到viewmodel的引用链。 然后,您可以从UI树中删除View以及所有对VM的引用 – 但是由于root BindingExpression VM引用链,VM永远不会被垃圾回收。 我创建了两个说明问题的例子。 它们有一个按钮来创建一个新的视图/视图模型(它应该转储对旧视图的所有引用)和一个强制垃圾收集并报告当前内存使用情况的按钮。 示例1是超级剥离的校准微型示例。 示例2不使用框架,只是以我能想到的最简单的方式说明问题。 例1 例2 对于那些可能想要帮助但又不想下载示例项目的人,这里是代码2的代码。我们从一个名为FooViewModel的viewmodel开始: public class FooViewModel : INotifyPropertyChanged { string _fooText; public string FooText { get { return _fooText; } set { _fooText = value; NotifyPropertyChanged(“FooText”); } } private byte[] _data; public FooViewModel() { _data […]

绑定XAML中Itemscontrol之外的Property

我试图绑定一个在Itemscontrol之外的Property。 然而,这似乎不起作用。 似乎在ItemsControl中,DataTemplate指的是集合内部而不是它之外的内容。 我已尝试使用RelativeResource并为ViewModel引用了AncestorType。 代码(VM): public class Test { public string GetThis {get{return “123”;} set{}} public List IterateProperty {get; set;} } XAML(查看):

带有UserControls的WPF Caliburn.Micro和TabControl问题

我很确定这已经在某处得到了解答,但我似乎无法在我的生活中找到它。 我正在尝试使用TabControl在UserControls之间切换(每个选项卡都不同,因此不使用Items) 这是细分:我有我的主视图和3个用户控件。 Mainview有一个选项卡控件 – 每个选项卡应显示不同的用户控件。 我可以很容易地将tabcontrol对象设置为usercontrol但是它没有绑定到viewmodel,只绑定了视图。 所以我在我的VM和ActivateItem中使用Conductor。 这是它开始变得奇怪/令人沮丧的地方。 应用程序从选中Tab0开始,但Tab2(最后一个选项卡)内容。 单击任何其他选项卡,为该选项卡加载正确的ViewModel。 单击返回Tab0,同时加载正确的内容。 我如何让它停下来? 另外,如果切换标签没有再次重新初始化视图模型,清除已经输入的字段,我真的很喜欢它。 无论如何,这是我的一些来源,我将在这里放弃它并在我打破鼠标之前处理其他事情。 视图: 和ViewModel: class MainViewModel : Conductor { RemoteInfoViewModel remoteInfo = new RemoteInfoViewModel(); RemoteToolsViewModel remoteTools = new RemoteToolsViewModel(); CHRemoteViewModel chRemote = new CHRemoteViewModel(); public MainViewModel() { ActivateItem(remoteInfo); } public void LoadRemoteInfo() { ActivateItem(remoteInfo); } public void LoadRemoteTools() { ActivateItem(remoteTools); } public […]

使用WPF和Caliburn.Micro在视图中添加多个视图

我正在尝试使用带有WPF的Caliburn.Micro学习。 如何在视图中添加多个视图? 另一个视图,带有viewmodel:MyControlViewModel … 如果我只是添加视图,它将不会检测到它具有具有适当名称的viewmodel。 我怎么能把它绑在上面呢? 我已尝试使用不同的bootstrappers并使用类似cal:Bind.Model =“path / classname / merge of the two”。 试图将其添加到主视图和usercontrol(MyControlView)。 我非常感谢有关此事的任何帮助。 我几乎被卡住了,我真的想用Caliburn.Micro 🙂 最好的问候,钻石鱼 编辑:我仍然无法让它工作,问题似乎是在引导程序或其他东西。 但只是为了澄清,这是我正在为testproject运行的代码。 MainView xaml: MainViewModel代码: public partial class MainViewModel : PropertyChangedBase { } MyControlView xaml: MyControlView代码: public class MyControlViewModel : PropertyChangedBase { public string MyProp { get { return “Working”; } } } 错误的屏幕截图: http […]

如何使用WinRT Caliburn.Micro将参数传递给导航视图模型?

我正在使用WinRT Caliburn.Micro开发Windowsapp store应用游戏,我依赖于导航框架。 我有游戏设置(定义玩家)和实际游戏的视图模型。 当从设置导航到游戏时,我想将玩家的集合传递给游戏视图模型。 我怎样才能做到这一点? 原理上,我的视图模型目前看起来像这样: public class SetupGameViewModel : NavigationViewModelBase { public SetupGameViewModel(INavigationService ns) : base(ns) { } public IObservableCollection Players { get; set; } public void StartGame() { // This is as far as I’ve got… base.NavigationService.NavigateToViewModel(); // How can I pass the Players collection from here to the GameViewModel? } } […]

Caliburn Message.Attach()抛出“找不到方法的目标”

我有一个列表框,我正在为ItemContainer设置样式以包含上下文菜单。 这是同样的xaml。 … 我在ViewModel中编写了目标方法,如下所示。 public void DeleteGroup() { //ToDo … } ViewModel被设置为UserControl的DataContext,其中有ListBox。 上面的代码导致“找不到方法的目标” 。 我不确定为什么这不起作用。 我也尝试过以下变化 其中UCRelayDispositionView是UserControl的名称。 为什么上面的代码不起作用? 编辑:1还尝试了以下内容 还有这个 编辑:2我试图在ItemContainer上以下列方式使用Tag,但它也不起作用。 编辑3:绑定错误 System.Windows.Data Error: 40 : BindingExpression path error: ‘PlacementTarget’ property not found on ‘object’ ”MenuItem’ (Name=”)’. BindingExpression:Path=PlacementTarget.Tag; DataItem=’MenuItem’ (Name=”); target element is ‘MenuItem’ (Name=”); target property is ‘TargetWithoutContext’ (type ‘Object’) System.Windows.Data Error: 4 : […]

Caliburn Micro和ModernUI示例/教程

有没有人有关于如何将Caliburn Micro与ModernUi( https://mui.codeplex.com )一起使用的示例或教程?