0

DataTemplate のビューのプロパティにバインドするにはどうすればよいですか? これが私のコードです。(Grid column 2, row 0) で、列 0 - 行 - 0 から TreeView で選択した項目にバインドしようとする試みを確認できますMainWindow.xamlが、これは機能しません。

MainWindow.xamlDataTemplate を使用する代わりにTreeView を移動すると、すべてが期待どおりに機能します。

注: リポジトリ コレクション ({Binding Repositories}列 0、行 0 のItemsMainWindow.xaml 内) は、RepositoryVM インスタンスのコレクションであり、そのプロパティにはItemVMインスタンスのコレクションが含まれています。また、 のChildrenプロパティにはインスタンスのItemVMコレクションが含まれていますItemVM

コード:

MainWindow.xaml

    <Grid Margin="0">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="4" />
            <ColumnDefinition Width="Auto" />
        </Grid.ColumnDefinitions>

        <Grid.RowDefinitions>
            <RowDefinition Height="*" />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>

        <Border Grid.Column="0" Grid.Row="0" MinWidth="200" >
            <ContentControl Content="{Binding Repositories}"
                            ContentTemplate="{StaticResource WorkspaceTemplate}"/>

         </Border>

        <GridSplitter Grid.Column="1" 
                      ResizeDirection="Columns" 
                      ResizeBehavior="PreviousAndNext" 
                      Width="4"
                      Height="Auto"/>

        <Border Grid.Column="2" Grid.Row="0">
            <ContentControl Content="{Binding ElementName=repoTree, Path=SelectedItem}"/>
        </Border>

        <StatusBar Grid.ColumnSpan="3" Grid.Column="0" Grid.Row="1">
            <TextBlock Text="{Binding ElementName=repoTree, Path=SelectedItem}" />
        </StatusBar>
    </Grid>

MainWindowResources.xaml

<DataTemplate DataType="{x:Type vm:ItemVM}">
    <vw:ItemView />
</DataTemplate>

<DataTemplate DataType="{x:Type vm:RepositoryVM}">
    <vw:RepositoryView />
</DataTemplate>

<DataTemplate x:Key="WorkspaceTemplate">
    <TabControl ItemsSource="{Binding}">
        <TabControl.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding DisplayName}" />
            </DataTemplate>
        </TabControl.ItemTemplate>
    </TabControl>
</DataTemplate>

RepositoryView.xaml

    <TreeView ItemsSource="{Binding Items}" x:Name="repoTree">
        <TreeView.ItemTemplate>
            <HierarchicalDataTemplate ItemsSource="{Binding Children}">
                <TextBlock Text="{Binding Name}" />
            </HierarchicalDataTemplate>
        </TreeView.ItemTemplate>
    </TreeView>

ItemView.xaml

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition />
        <ColumnDefinition />
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition />
        <RowDefinition />
        <RowDefinition />
    </Grid.RowDefinitions>

    <TextBlock Grid.Column="0"
               Grid.Row="0" 
               Text="Name: " />
    <TextBlock Grid.Column="0"
               Grid.Row="1"
               Text="Type:" />
    <TextBox Grid.Column="1"
             Grid.Row="0" 
             Text="{Binding Name}"/>
    <TextBox Grid.Column="1"
             Grid.Row="1" />

</Grid>

質問は - どうすればバインドの試みをrepoTree機能させ、引き続き DataTemplate を使用できますか?

アップデート:

出力ウィンドウに表示されるエラーは次のとおりです。

System.Windows.Data Error: 4 : Cannot find source for binding with reference 'ElementName=repoTree'. BindingExpression:Path=SelectedItem; DataItem=null; target element is 'ContentControl' (Name=''); target property is 'Content' (type 'Object')

同じバインドであるため、ステータスバーも同じです。

4

0 に答える 0