1

私はWPFを初めて使用し、MVVMパラダイムに従ってDataBindingを使用して小さなアプリケーションを開発しようとしています。

ObservableCollection of Documents(私のタイプ)にバインディング機能を提供しようとしています。最初のラベルにはドキュメントパス(属性プロパティから利用可能)が表示され、次の子(ドキュメントのページ)には適切な情報(ページインデックスとページコンテンツ(画像))が表示されます。

ここに問題があります-親ラベルへのルックアップバインディングを作成するにはどうすればよいですか?ボタンクリックコマンドで、最初のDataTemplateで以前に使用可能だったドキュメントパスを渡したいと思います。

この問題に取り組む方法はありますか?どのようにそれを回避することをお勧めしますか?

また、「ネストされた」構造(コレクション内のコレクション)に取り組むためのより良い方法はありますか?

これがコードhttps://gist.github.com/b5760982ba81e8ee4036、14行目です

4

1 に答える 1

0

RelativeSource を使用する必要があります。

<ItemsControl ItemsSource="{Binding Documents}">
<ItemsControl.ItemTemplate>
    <DataTemplate>
        <StackPanel>
            <Label Content="{Binding Path=Attribute.Path}"/>
                <ItemsControl ItemsSource="{Binding Pages}">
                    <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <StackPanel>




<Label Content="{Binding Index}"/>
                                <Button Content="{Binding Content}"
                                        Command="{x:Static viewModel:DocViewModel.Tests }" 
                                        CommandParameter="{Binding Path=DataContext.Attribute.Path,RelativeSource={RelativeSource AncestorType=ContentPresenter, Mode=FindAncestor,AncestorLevel=2"/> 
                            </StackPanel>
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                </ItemsControl>
            </StackPanel>
        </DataTemplate>
    </ItemsControl.ItemTemplate>

于 2012-12-03T13:29:45.693 に答える