В среде DevExpress MVVM вы можете определить как стандартные ViewModels, наследуемые от ViewModelBase. Или вы можете определить POCO ViewModels (see this link), которые лучше и сложнее.(WPF) DevExpress mvvm + замок Виндзор. Как создать модели просмотра POCO?
Чтобы построить такую модель представления "POCO", вы должны использовать ViewModelSource Util. Это приведет к созданию стандартного фиктивного класса в POCO ViewModel.
namespace DataAbstractWPF.ViewModels
{
[POCOViewModel]
public class EntityKindViewModel : Interfaces.ICreateEntityKindViewModel
{
}
}
Затем в XAML, чтобы создать экземпляр или определить такую ViewModel POCO, вы должны:
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:dxmvvm="http://schemas.devexpress.com/winfx/2008/xaml/mvvm"
xmlns:ViewModels="clr-namespace:DataAbstractWPF.ViewModels"
d:DataContext="{dxmvvm:ViewModelSource ViewModels:CreateEntityWizardViewModel}"
Если вы передаете ViewModel к представлению динамически или просто
xmlns:dxmvvm="http://schemas.devexpress.com/winfx/2008/xaml/mvvm"
xmlns:ViewModels="clr-namespace:DataAbstractWPF.ViewModels"
DataContext="{dxmvvm:ViewModelSource ViewModels:CreateEntityWizardViewModel}"
Если вы хотите, чтобы ViewModel был создан непосредственно XAML.
Вы также можете создать его с помощью кода
ViewModelSource.Create<LoginViewModel>();
Или заводом, который может быть создан в рамках.
var factory = ViewModelSource.Factory((string caption) => new LoginViewModel(caption));
factory("Login");
Теперь, используя замок Виндзор, зарегистрировать это:
container.Register(Component.For<Interfaces.ICreateEntityKindViewModel>().ImplementedBy<ViewModels.EntityKindViewModel>().LifestyleTransient());
container.Register(Component.For<Interfaces.ICreateEntityWizardViewModel>().ImplementedBy<ViewModels.CreateEntityWizardViewModel>().LifestyleTransient());
container.Register(Component.For<Interfaces.IMainWindowViewModel>().ImplementedBy<ViewModels.MainWindowViewModel>().LifestyleTransient());
container.Register(Component.For<Interfaces.ICreateEntityWizard>().ImplementedBy<Views.CreateEntityWizard>().LifestyleTransient());
container.Register(Component.For<Interfaces.IMainWindow>().ImplementedBy<Views.MainWindow>().LifestyleTransient());
container.Register(Component.For<Interfaces.ICreateEntityKind>().ImplementedBy<Views.EntityKind>().LifestyleTransient());
container.Register(Component.For<Interfaces.IShell>().ImplementedBy<Shell>().LifestyleTransient());
Но теперь, конечно, ViewModelSource полностью обойден, и некогда прекрасный ПОКО ViewModel теперь просто манекен бесполезно объект.
Теперь, мой вопрос заключается в том, как можно использовать и ViewModelSource для создания POCO viewModels, и позволить им быть введенным Castle Windsor?
спасибо.