2

子ウィンドウで View Model Locator を使用したいと考えています。問題はこれが機能しないことです:

<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}}>

次のエラーが表示されます: 名前/キー ロケータを持つリソースが見つかりません

4

2 に答える 2

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" />
于 2011-08-17T12:28:41.307 に答える
1

それが機能しない理由は、私の 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>

どうやら、ビューはapp resources の前に作成されました!

于 2011-10-10T14:41:45.510 に答える