есть ли у кого-нибудь пример или руководство по использованию Caliburn Micro вместе с ModernUi (https://mui.codeplex.com)?
Примеры/учебники Caliburn Micro и ModernUI
Ответы (2)
Итак, я быстро повозился с этим и посмотрел на форумах Mui, и это кажется лучшим подходом:
Поскольку окно загружает содержимое с URL-адресов, вам необходимо использовать подход, основанный на просмотре, а затем найти соответствующую виртуальную машину и связать их.
Лучший способ сделать это — использовать класс ContentLoader
, который используется для загрузки содержимого в ModernWindow
по запросу. Вы можете просто создать подкласс DefaultContentLoader
и предоставить необходимую магию CM для привязки загруженных элементов:
public class ModernContentLoader : DefaultContentLoader
{
protected override object LoadContent(Uri uri)
{
var content = base.LoadContent(uri);
if (content == null)
return null;
// Locate the right viewmodel for this view
var vm = Caliburn.Micro.ViewModelLocator.LocateForView(content);
if (vm == null)
return content;
// Bind it up with CM magic
if (content is DependencyObject)
{
Caliburn.Micro.ViewModelBinder.Bind(vm, content as DependencyObject, null);
}
return content;
}
}
Ваш загрузчик CM должен просто загрузить модель представления ModernWindow
, которая поддерживается представлением на основе ModernWindow
(CM пытается использовать EnsureWindow
, который создает новый базовый класс окна WPF, если, конечно, ваш элемент управления уже не наследуется от Window
, что делает ModernWindow
. Если вам нужны все диалоги и всплывающие окна, чтобы быть MUI, вам может потребоваться переопределить WindowManager
):
public class Bootstrapper : Bootstrapper<ModernWindowViewModel>
{
}
Который может быть проводником (OneActive) и выглядит так:
public class ModernWindowViewModel : Conductor<IScreen>.Collection.OneActive
{
}
И XAML для представления
ModernWindowView.xaml
<mui:ModernWindow x:Class="WpfApplication4.ViewModels.ModernWindowView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mui="http://firstfloorsoftware.com/ModernUI"
Title="ModernWindowView" Height="300" Width="300" ContentLoader="{StaticResource ModernContentLoader}">
<mui:ModernWindow.MenuLinkGroups>
<mui:LinkGroupCollection>
<mui:LinkGroup GroupName="Hello" DisplayName="Hello">
<mui:LinkGroup.Links>
<mui:Link Source="/ViewModels/ChildView.xaml" DisplayName="Click me"></mui:Link>
</mui:LinkGroup.Links>
</mui:LinkGroup>
</mui:LinkGroupCollection>
</mui:ModernWindow.MenuLinkGroups>
</mui:ModernWindow>
Очевидно, вам также нужно сделать загрузчик ресурсом:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/FirstFloor.ModernUI;component/Assets/ModernUI.xaml" />
<ResourceDictionary Source="/FirstFloor.ModernUI;component/Assets/ModernUI.Dark.xaml"/>
<ResourceDictionary>
<framework:ModernContentLoader x:Key="ModernContentLoader"></framework:ModernContentLoader>
<wpfApplication4:Bootstrapper x:Key="Bootstrapper"></wpfApplication4:Bootstrapper>
</ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
Вот ChildViewModel
, который я использую в качестве теста:
public class ChildViewModel : Conductor<IScreen>
{
public void ClickMe()
{
MessageBox.Show("Hello");
}
}
И XAML для этого (просто кнопка)
<UserControl x:Class="WpfApplication4.ViewModels.ChildView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="350" Width="525">
<Grid>
<StackPanel>
<TextBlock >Hello World</TextBlock>
<Button x:Name="ClickMe" Width="140" Height="50">Hello World</Button>
</StackPanel>
</Grid>
</UserControl>
И доказательство концепции:
nuget install packages.config
- person Charleh; 09.05.2013
WindowManager
и зарегистрировать свой собственный оконный менеджер в качестве реализации для службы IWindowManager
. Это WindowManager
будет использовать MordernWindow
вместо окон по умолчанию.
- person Charleh; 16.03.2015
Я создаю очень, очень простой пример приложения для чата, используя Modern UI для WPF, Caliburn Micro и MEF.
https://github.com/gblmarquez/mui-sample-chat
Я надеюсь, что это помогает
EnsureWindow
) caliburnmicro.codeplex.com/SourceControl/changeset/view/ - person Charleh   schedule 07.05.2013ModernWindow
. Также похоже, что он динамически загружает контент на основе URL-адресов ресурсов, и поэтому подход, основанный на модели представления, вероятно, не сработает. - person Charleh   schedule 08.05.2013