0

マスター/子ビューとカスタム依存関係プロパティを実装すると、奇妙な問題が発生します。

masterView 内で、次のように XAML でビュー モデルを宣言的にバインドしています。

 DataContext="{Binding MainViewModelProperty, Source={StaticResource Locator}}"

私のMainViewModelは、次のようにItemsControlにバインドしている監視可能なコレクションを公開しています:

        <ItemsControl ItemsSource="{Binding Lists}" Height="490" Canvas.Top="10" Width="70">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <Canvas>
                    <local:TaskListControl Canvas.Left="{Binding ListLeft}" 
                                           Canvas.Top="{Binding ListTop}" 
                                           Width="{Binding ListWidth}" 
                                           Height="{Binding ListHeight}"
                                           ListDetails="{Binding}"/>
                    </Canvas>    
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>    

次に、TaskListControl を宣言してその ViewModel にバインドし、ListDetails プロパティの依存関係プロパティも定義しました。

ListDetails プロパティが設定されていません。ビューモデルへの宣言的な参照を削除すると、依存関係プロパティのコールバックが起動されます。

ビューモデルへの宣言的なバインディングと依存関係プロパティの定義との競合はありますか?

私はMVVM Lightのブレンド性が本当に好きで、この問題を解決したいと思っています。

私のプロジェクトのソースを受け取りたい場合は、お問い合わせください

4

1 に答える 1

0

あなたの問題を完全に理解しているかどうかはわかりませんが、試して推測してみましょう.「ビューモデルに宣言的にバインドする」と言うとき、実際には「XAML」ではなく「コード内」のように「命令的に」という意味ですか?

この場合、これが親からの DataContext 継承をオーバーライドしていることを理解する必要があります。ListDetails プロパティは、DataTemplate の DataContext ではなく、TaskListControl DataContext を参照するようになりました。

ただし、これは簡単に変更できます。たとえば、次のようにします。

<ItemsControl ItemsSource="{Binding Lists}" 
              Height="490" 
              Canvas.Top="10" 
              Width="70">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Canvas x:Name="RootPanel">
                <local:TaskListControl Canvas.Left="{Binding ListLeft}" 
                                       Canvas.Top="{Binding ListTop}" 
                                       Width="{Binding ListWidth}" 
                                       Height="{Binding ListHeight}"
                                       ListDetails="{Binding ElementName=RootPanel, 
                                           Path=DataContext}"/>
            </Canvas>    
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

それはうまくいくでしょうか?ローラン

于 2010-04-23T09:35:20.420 に答える