2

WPF アプリケーションのデータ バインディングに問題があります。状況は次のとおりです。

2 つのコントロールがあります。1 つはツリー ビューで、もう 1 つはリストで選択された項目の詳細ビューです。次のコードですべてが機能していました(バインディング):

<avalonDock:LayoutAnchorablePaneGroup DockWidth="230" Orientation="Vertical">     
    <avalonDock:LayoutAnchorablePane Name="CTTreeLayout">
        <avalonDock:LayoutAnchorable Title="CTs">
            <treeControl:TreeViewUControl x:Name="TreeViewCTs">
            </treeControl:TreeViewUControl>
        </avalonDock:LayoutAnchorable>
    </avalonDock:LayoutAnchorablePane>
    <avalonDock:LayoutAnchorablePane Name="CTInfoLayout">
        <avalonDock:LayoutAnchorable Title="Información">
            <infoControl:EntityInfoUControl x:Name="InfoControl" SelectedItem="{Binding ElementName=TreeViewCTs, Path=CTViewModel.SelectedItem}">
            </infoControl:EntityInfoUControl>
        </avalonDock:LayoutAnchorable>
    </avalonDock:LayoutAnchorablePane>
</avalonDock:LayoutAnchorablePaneGroup>

選択した項目は、詳細コントロールの依存関係プロパティでした。

現在、Avalondock を使用してレイアウト戦略を変更しています (コード内の avalonDock タグからわかるように)。これは、テンプレート セレクターを使用することを意味します。レイアウトは正しく機能しますが、バインドが壊れています。テンプレート内の各コントロールを含む実際のコードは次のとおりです。

<avalonDock:DockingManager.LayoutItemTemplateSelector>
    <layout:PanesTemplateSelector>
        <layout:PanesTemplateSelector.CTToolTemplate>
            <DataTemplate>
                <treeControl:TreeViewUControl x:Name="TreeViewCTs"/>
            </DataTemplate>
        </layout:PanesTemplateSelector.CTToolTemplate>
        <layout:PanesTemplateSelector.CTInfoToolTemplate>
            <DataTemplate>
                <infoControl:EntityInfoUControl x:Name="InfoControl" SelectedItem="{Binding CTViewModel.SelectedItem, ElementName=TreeViewCTs}"/>
            </DataTemplate>
        </layout:PanesTemplateSelector.CTInfoToolTemplate>
    </layout:PanesTemplateSelector>
</avalonDock:DockingManager.LayoutItemTemplateSelector>

バインディングを更新して再び機能させるにはどうすればよいですか? FindAncestor を試してみましたが成功しませんでした。

編集:

最終的に解決しました。ディーン・チョークが言ったように、私の戦略では私の目標は達成できませんでした。何度か頭を悩ませた後、データモデルをリファクタリングしました。これで、ツリー ビューと詳細ビューを含むビュー モデルができました。AvalonDock 2.0 MVVM サンプルの構造に従っています。

サンプルはこちら

4

1 に答える 1

0

このようなを使用すると、実行時DataTemplateに設定されたものにのみバインドできます。DataContext別のコントロールを表示SelectedItemできず、ElementNameバインディングを使用できません。

この種の問題を解決する簡単な方法は実際にはありません。データ モデルを詳しく調べる必要があります。

于 2013-04-22T09:06:49.193 に答える