私はPrism(CompositeUIの場合のみ)とMVVM Light Toolkit(MVVMアーキテクチャの場合= D)を連携させようとしていますが、Light ViewModelLocatorにいくつか問題があります。 私たちは「シンプル」WPFアプリケーションにロケータを使用する場合、我々はこのように、App.xaml上のアプリケーションのリソースを使用することができます。PrismとMVVM Light Toolkit
<Application.Resources>
<vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True" />
</Application.Resources>
をしかし、我々はプリズムを使用しているとき、私たちのビジネスのコードでは、モジュールプロジェクト内にあります、そしてそれは私がビューリソース内でそのリソースを入れてみました、その後、App.xamlを持っていない:それはちょうど私のデザインモード(と、ランタイム)エラーをオフに
<Window.Resources>
<ResourceDictionary>
<vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True" />
</ResourceDictionary>
</Window.Resources>
が、ビューは」doesnのそれに割り当てられた領域には表示されません。
誰かがすでにこのようなことを試みましたか? 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モジュールビューでは使用されていません。このファイルの構造は次のとおりです。
<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>
これは、アプリケーションを実行するときに起こります。モジュール上にあったビューは、そのボタンを示し、この空白にロードされたが、何も起こってはならない。
http://imageshack.us/photo/my-images/818/capturarwy.png
私は、このビューを変更しようとその場所「単純なビュー」(に入れ下図に示すように)MVVMLightを使用していないことは、完璧に動作します:ViewLight.xamlで
http://imageshack.us/photo/my-images/513/capturar1a.png
どのコンテナを使用しますか? MEFかUnity?ビューコードビハインドとViewModelコードビヘイビアのコードを投稿できますか?また、V-VMをどのように領域に注入するかを記述します。 MVVMLight、デザインデータなどは、PRISM/Silverlightで扱う別の問題です。表示されていない表示が最も可能性が高い合成エラー – katit
Unityを使用しています。質問を編集してコード全体を投稿します。 –
デフォルトのコードを除いて、ビューにコードビハインドはありません。 実行中のアプリケーションの説明されたスクリーンショットが参考になると思いますか? –