1

次の XAML コードを使用して、ViewModel をビューの DataContext として設定しようとしています。

<UserControl.DataContext>
    <local:MyViewModel />
</UserControl.DataContext>

<UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/MA_Resources/MA_ResourceDictionary.xaml" />
        </ResourceDictionary.MergedDictionaries>

        <local:MyViewModel x:Key="myViewModel" x:Name="myVM" />
    </ResourceDictionary>
</UserControl.Resources>

しかし、ビューモデル コンストラクターが 2 回呼び出されていることがわかります。View-Model が XAML で 2 回インスタンス化されていることと、リソースから DataContext を StaticResource として設定する必要があることを理解しています。ただし、StaticResource で DataContext を設定する方法がわかりません。次のことを試しましたが、例外が発生しています。

<UserControl .... DataContext="{StaticResource myViewModel}" >

DataContext を割り当てるための適切な XAML コードを理解するのを手伝ってください。

4

1 に答える 1

3

後で xaml ファイルで定義されている場合、静的リソースを参照することはできません。したがって、次のことができます。

<UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/MA_Resources/MA_ResourceDictionary.xaml" />
        </ResourceDictionary.MergedDictionaries>

        <local:MyViewModel x:Key="myViewModel" x:Name="myVM" />
    </ResourceDictionary>
</UserControl.Resources>
<UserControl.DataContext>
    <StaticResourceExtension ResourceKey="myViewModel"/>
</UserControl.DataContext>

なぜ ViewModel を静的リソースとして定義したいのだろうか。個人的には、のセッターでのインスタンス化を好みますDataContext

于 2012-11-11T18:20:20.497 に答える