Я пытаюсь использовать Prism (только для CompositeUI) и MVVM Light Toolkit (для MVVM architecture = D), но я получаю некоторые проблемы с Light ViewModelLocator. Когда мы используем локатор в «простое» приложение WPF, мы можем использовать ресурс приложения на App.xaml, как это:Призма и MVVM Light Toolkit
<Application.Resources>
<vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True" />
</Application.Resources>
Но когда мы используем Prism, наш бизнес код находится внутри проекта модуля , и он не имеет app.xaml, то я пытался поставить этот ресурс внутри вида ресурсов:
<Window.Resources>
<ResourceDictionary>
<vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True" />
</ResourceDictionary>
</Window.Resources>
это просто выключил режим Design (а также выполнения) ошибок, но View Безразлично» t появляется в области, назначенной ему.
Кто-то уже пытался сделать что-то вроде этого? Можно ли подключить Prism и MVVM Light вместе?
Это мой "полный" код:
(ViewLight.xaml)
<Window x:Class="TryERP2.Financeiro.View.ViewLight"
... a lot of NS ...
mc:Ignorable="d"
xmlns:vm="clr-namespace:TryERP2.Financeiro.ViewModel"
d:DesignHeight="150" d:DesignWidth="245" SizeToContent="WidthAndHeight">
<Window.Resources>
<ResourceDictionary>
<vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True" />
</ResourceDictionary>
</Window.Resources>
<Grid DataContext="{Binding Light, Source={StaticResource Locator}}">
<Button Content="{Binding MyButtonText}" HorizontalAlignment="Stretch" Name="button1" VerticalAlignment="Stretch" />
</Grid>
</Window>
ViewLightModel.cs:
public class ViewLightModel : ViewModelBase
{
public ViewLightModel()
{ }
public const string MyButtonTextPropertyName = "MyButtonText";
private string _myButtonText = "Button Text";
public string MyButtonText
{
get
{ return _myButtonText; }
set
{
if (_myButtonText == value)
{ return; }
_myButtonText = value;
RaisePropertyChanged(MyButtonTextPropertyName);
}
}
}
Financeiro.cs (Класс модуля инициализатор ... Частично показано ... Только там, где я регистрирую и «вызываю» виды):
var container = ServiceLocator.Current.GetInstance<IUnityContainer>();
container.RegisterType<Object, ViewLight>("ViewLight");
var regionManager = ServiceLocator.Current.GetInstance<IRegionManager>();
var main = new Uri("ViewLight", UriKind.Relative);
regionManager.RequestNavigate("Desktop", main);
«Обычное» приложение MVVM Light имеет файл App.xaml, который (я думаю) не используется в модулях Prism Views. Этот файл имеет следующую структуру:
<Application x:Class="TryERP2.Financeiro.App"
... a lot of NS ...
xmlns:vm="clr-namespace:TryERP2.Financeiro.ViewModel"
StartupUri="MainWindow.xaml"
mc:Ignorable="d">
<Application.Resources>
<vm:ViewModelLocator x:Key="Locator"
d:IsDataSource="True" />
</Application.Resources>
</Application>
Это то, что происходит, когда я выполняю свое приложение. View, который был на модуль должен быть загружен в этот пробел, показывая свою кнопку, но ничего не произошло:
http://imageshack.us/photo/my-images/818/capturarwy.png
Когда я пытаюсь изменить эту точку зрения и поставить на его место «простой вид» (не используя MVVMLight) она прекрасно работает, как показано на рисунке:
http://imageshack.us/photo/my-images/513/capturar1a.png
Какой контейнер вы используете? MEF или Unity? Можете ли вы опубликовать код для вашего вида codebehind и ViewModel codebehind? Кроме того, код о том, как вы вводите V-VM в регион. MVVMLight, данные проектирования и т. Д. - это отдельные проблемы, с которыми вы работаете в PRISM/Silverlight. Просмотр не отображается, скорее всего, ошибка композиции – katit
Я использую Unity. Я опубликую весь код, отредактировав вопрос. –
В представлении отсутствует код, кроме кода по умолчанию. Считаете ли вы, что объясненный скриншот запускающего приложения будет полезен? –