2

子モデルウィンドウでビューモデルロケータを使用します。 問題は、これは動作しませんされています MVVMライトビューモデルロケータをSilverlight 4の子ウィンドウで使用する

<controls:ChildWindow x:Class="Views.PopupViews.AddAlert" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:controls="clr namespace:System.Windows.Controls;assembly=System.Windows.Controls" 
     DataContext="{Binding AddAlert, Source={StaticResource Locator}}> 

が、私はエラーを取得: 名前/キーロケータ

+0

最後に ""がありません。私はそれを試して、それを試してみてください:DataContext = "{バインドAddAlert、ソース= {StaticResourceロケータ}}" – Rumplin

答えて

1

[OK]を、それが動作していない理由は、私のchildWindowが内部に作成されていますIApplicationServiceのctorです。

このpopupServiceはApp.xamlの中で宣言されています

<Application.Resources> 
    <ResourceDictionary> 
     <vm:ViewModelLocator xmlns:vm="clr-namespace:Client.ViewModel" x:Key="Locator" /> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="Assets/Styles.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Application.Resources> 
<Application.ApplicationLifetimeObjects> 
    <popup:myPopupService/> 
</Application.ApplicationLifetimeObjects> 

どうやら、ビューが作成された前にアプリのリソースを!

1

とリソースを見つけることができませんが、静的に子ウィンドウを結合することに何のトリックはありませんロケータパターンを使用してビューモデルを作成します。私の推測ではあなたのDataContextが間違っています。

チェック: ロケータクラスに「AddAlert」プロパティが定義されていることを確認してください。ような何か:

private static AddAlertViewModel _AddAlertViewModel; 

    /// <summary> 
    /// Gets the ViewModelPropertyName property. 
    /// </summary> 
    public static AddAlertViewModel AddAlertViewModelStatic 
    { 
     get 
     { 
      if (_AddAlertViewModel == null) 
      { 
       CreateAddAlertViewModel(); 
      } 

      return _AddAlertViewModel; 
     } 
    } 

    /// <summary> 
    /// THIS PROPERTY IS WHAT YOU NEED TO REFERENCE IN YOUR XAML 
    /// </summary> 
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1822:MarkMembersAsStatic", Justification = "This non-static member is needed for data binding purposes.")] 
    public AddAlertViewModel AddAlert 
    { 
     get 
     { 
      return AddAlertViewModelStatic; 
     } 
    } 

そしてもちろん、あなたのビューモデルロケータがあなたのApp.xamlファイルでインスタンス化されていることを確認します

<vm:MyModelLocator xmlns:vm="clr-namespace:MyAppNamespace" x:Key="Locator" /> 
関連する問題