DataTemplate のビューのプロパティにバインドするにはどうすればよいですか? これが私のコードです。(Grid column 2, row 0) で、列 0 - 行 - 0 から TreeView で選択した項目にバインドしようとする試みを確認できますMainWindow.xaml
が、これは機能しません。
MainWindow.xaml
DataTemplate を使用する代わりにTreeView を移動すると、すべてが期待どおりに機能します。
注: リポジトリ コレクション ({Binding Repositories}
列 0、行 0 のItems
MainWindow.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')
同じバインドであるため、ステータスバーも同じです。