绑定到DataType的DataTemplate的属性

时间:2012-06-29 07:45:31

标签: wpf xaml binding mvvm mvvm-light

如何在DataTemplate中绑定到view属性?这是我的代码。您可以在MainWindow.xaml(网格第2列,第0行)中看到我尝试从第0列 - 第0行绑定到TreeView中的选定项目,但这不起作用。

如果我将TreeView移动到MainWindow.xaml而不是使用DataTemplate - 一切都按预期工作。

注意:存储库集合(第0列第0行MainWindow.xaml中的{Binding Repositories})是RepositoryVM实例的集合,其Items属性包含ItemVM个实例的集合。此外,Children的{​​{1}}属性包含ItemVM个问题的集合。

代码:

MainWindow.xaml

ItemVM

MainWindowResources.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>

RepositoryView.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>

ItemView.xaml

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

问题是 - 我怎样才能尝试绑定到<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> 才能工作并仍然使用DataTemplate?

更新

我在输出窗口中输入的错误是:

repoTree

与状态栏相同,因为它是相同的绑定。

0 个答案:

没有答案