Tag: caliburn.micro

使用ModernUI + Caliburn.Micro组合重新实现WindowManager

在这里, Caliburn.Micro成功地与ModernUI合并。 但是如果我们想要使用多个窗口,我们还需要重新实现Caliburn的WindowManager才能与ModernUI一起正常工作。 怎么做到呢? 更新:(关于IoC容器/dependency injection的附加问题) 好吧,我得到它:我在这里使用了一个构造函数注入: public class BuildingsViewModel : Conductor { public BuildingsViewModel(IWindowManager _windowManager) { windowManager = _windowManager; } } 至于BuildingsViewModel从IoC容器解析,容器本身注入了IWindowManager接口的ModernWindowManager实现,因为Bootstrapper的Configure()方法中的这一行: container.Singleton(); 如果我从容器中解析对象实例,它会注入所有必需的依赖项。 像一棵树。 1)所以现在我想知道如何使用注射(带接口)替换这条线? _windowManager.ShowWindow(new PopupViewModel()); 2)如果我希望我的整个项目匹配DI模式,所有对象实例必须注入ModernWindowViewModel ,它首先从容器解析? 3)在整个项目中使用Caliburn的SimpleContainer是否可以,或者更好地使用像Castle Windsor这样的成熟框架? 我应该避免混合吗? UPDATE2: 4)将IoC容器集成到现有应用程序中需要首先创建此容器(例如,在控制台应用程序的Main()方法中),然后所有对象实例必须通过注入的依赖项从中增长?

Caliburn Micro GoBack到上一页实例WinRT

我在Windows Phone 8.1(WinRT)应用程序上使用Caliburn.Micro.Core.2.0.1 我的所有ViewModel都以Screen为基础。 在我的MainView(Model)我可以使用CM的INavigationService导航到SettingsView(Model) private readonly INavigationService _navigationService; public void Navigate() { _navigationService.NavigateToViewModel(_param); } 然后使用硬件后退按钮或 public void GoBack() { _navigationService.GoBack(); } 我可以导航回MainView(模型)。 有用; 但是,它不能像我预期的那样工作或希望它能够工作。 当调用GoBack(或Back按钮)时,它会生成MainView(Model)的新实例 。 我希望它返回到从 MainView(Model) 实例导航 。 我尝试将MainViewModel注册为Singleton,这使得ViewModel成为一个单例(并引入了一些有趣的问题); 但仍然可以重新创建View 。 知道如何让导航返回到从实例导航 ?

Caliburn Micro:在ViewModel之间传递Object

我正在使用Caliburn Micro 2.0.0-alpha2开发一个简单的Crud应用程序(Windows 8.1商店应用程序) 我在视图模型之间导航,传递对象时遇到麻烦。 我多次阅读提出的解决方案 Anders Gustafsson( 如何使用WinRT Caliburn.Micro将参数传递给导航视图模型? ) 我试着让它适应我的范围。 但是这个对象是空的。 我需要将从listView中选择的单个对象传递给我的crudPage。 crudPage由显示FormView的userControl组成。 所以我想用传递对象的值初始化这个Form。 我认为问题是只有在创建ViewModel之后才初始化“参数”,但我不知道如何解决这个问题。 根据Anders Gustafsson的想法,有我的代码 TransporterListViewModel(来自数据库的传输器列表) public class TransporterListViewModel : ViewModelBase { public string Title { get; set; } public TransporterListViewModel(INavigationService navigationService) : base(navigationService) { LoadData(); } public async void LoadData() { _transporters = await TransporterService.GetAll(); } private BindableCollection _transporters; public […]

在Caliburn.Micro中如何将动作绑定到嵌套的ViewModel方法?

我有一个WPF应用程序,由Caliburn.Micro提供支持,是视图模型的第一种方法。 有一个命令栏类型的控件,其CommandBarView.xaml和绑定的CommandBarViewModel 。 命令栏VM包含许多嵌套的VM,每个按钮控件一个,所有这些都显示一个公共接口并具有共同的行为。 命令栏VM公开它们以便可以从视图绑定它们: public interface IWarningButtonViewModel { bool IsVisible { get; } bool CanShowWarning { get; } void ShowWarning(); } public class CommandBarViewModel : PropertyChangedBase { public IWarningButtonViewModel UserNotFoundWarning { get; private set; } public IWarningButtonViewModel NetworkProblemWarning { get; private set; } // … initialization omitted for simplicity } 对于一些CommandBarView,这是一个暂定的XAML: … … 通过这种方式,我能够成功绑定两个属性( […]

包含两个Caliburn.Micro视图的对话视图?

我有一个Windows WPF应用程序,我正在使用Caliburn.Micro。 主窗口视图/ viewmodel由Caliburn.Micro处理。 其中一个按钮会弹出一个新的对话窗口,该窗口使用不同的视图模型。 在这个对话框中,我有一个容器(列表框和一些filter控件),我想将它变成一个可重用的控件,以便我可以将它包含在其他对话框中。 为此,我从对话框的视图中提取并viewmodel相关代码并创建了一个新视图和viewmodel。 这一切看起来都不错。 问题是,现在回到对话框中我有一个带有大空空间的dockpanel,我需要可重复使用的控件。 从对话框viewmodel OnInitalize()我可以创建可重用的控件视图模型,但我不知道如何将它的视图放入对话框视图的dockpanel。 要从主窗口viewmodel创建对话框,我使用WindowManager()。ShowDialog()显示对话框的viewmodel,Caliburn.Micro负责设置视图。 有没有一种方法可以在对话框的XAML中指定我想为可重用控件嵌入视图并让Caliburn创建适当的视图/视图模型? 或者我是以错误的方式去做的?

双击后获取行信息

我试图在双击事件后从数据网格中检索行信息。 我有事件设置,但现在我只需要设置函数来从行中检索数据。 XAML: C#(MVVM ViewModel): public void RowSelect() { //now how to access the selected row after the double click event? } 非常感谢!

Caliburn Micro WPF窗口管理

我想使用caliburn.micro启动一个WPF应用程序,所以我可以尽可能多地使用TDD,我之前使用过caliburn.micro,而WPF似乎是一个不同的船,文档并不完整就像WP7那样。 我用我的Bootstrapper设置了这个项目 public class ApplicationBootstrapper : Bootstrapper { private SimpleContainer _container; private WindowManager _windowManager; protected override void Configure() { _container = new SimpleContainer(); _windowManager = new WindowManager(); _container.RegisterSingleton(typeof(MainViewModel), “MainViewModel”, typeof(MainViewModel)); _container.RegisterSingleton(typeof(DataViewModel), “DataViewModel”, typeof(DataViewModel)); } protected override object GetInstance(Type service, string key) { return _container.GetInstance(service, key); } protected override IEnumerable GetAllInstances(Type service) { return _container.GetAllInstances(service); } […]

在“内部”用户控件上使用Caliburn.Micro绑定function

我对Caliburn.Micro很新,所以我想这有一个简单的答案(或者至少我希望它有:)) 我有一个ViewModel,它有一个名为ConnectedSystem的属性,它有一个名为Name的子属性。 在我的视图中,我有以下XAML(摘录): 这很好用,名称按预期显示在TextBlock中。 但是,ConnectedSystem有大约10个应该显示的属性,我不想在我的视图中将XAML复制粘贴10次以上。 相反,我想将XAML提取为UserControl,我可以将LabelText和Text设置为属性。 我尝试过这个,但我不确定如何让Caliburn.Micro自动将ConnectedSystem_Name传递给我的UserControl。 这也许比在这里使用UserControl更好,所以问题基本上是:将这个共享XAML作为它自己的控件放置的最佳方法是什么,并且仍然能够使用Caliburn.Micros绑定。

Caliburn Micro – >从多个视图/ UserControls / CustomControls组合视图

如何在CM托管窗口中重用和组合部件? 我找到了关于使用两个UserControl来绑定到同一个ViewModel的post,但是如果我想在同一个窗口中创建多个视图和视图模型,那就没那么多了。 (每个视图的视图模型组成“主视图”) 我的问题的第一部分是如何分解组件以便重复使用? 如果我有一个窗口的两个区域,其中一个是数据网格,另一个是带有标签和文本框的详细信息视图,这些区域应该是单独的用户控件,自定义控件还是窗口? 理想情况下,每个人都可以独立,因此可以将它们分开并用于其他窗户。 因此,如果它们被分开,我最终会得到2个视图模型和2个视图。 现在假设我想创建3个窗口,一个窗口带有第一个视图,第二个带有第二个视图,第三个带有两个视图。 如何使用CM为每个视图创建窗口并将每个视图连接到其视图模型? 从我看到的例子中,我在窗口中看到了大部分视图和视图模型。

Caliburn.Micro + MEF +现代用户界面:IContent事件

我已经使用Caliburn.Micro和Modern UI( https://mui.codeplex.com )开始了一个项目,并且在我的视图模型上触发IContent的导航事件时遇到了一些困难。 我已经让两个人联系起来,彼此合作以下内容: CM Bootstrapper: public class CMBootstrapper : Bootstrapper { private CompositionContainer container; private DirectoryCatalog catalog; public CMBootstrapper() { } protected override void Configure() { catalog = new DirectoryCatalog(“.”, “*.*”); container = new CompositionContainer(catalog); var compositionBatch = new CompositionBatch(); compositionBatch.AddExportedValue(new WindowManager()); compositionBatch.AddExportedValue(new EventAggregator()); compositionBatch.AddExportedValue(container); container.Compose(compositionBatch); } protected override IEnumerable SelectAssemblies() { List […]