0

我有一个带有两个控件的窗口: control1 是一个具有一堆执行按钮的控件RoutedCommands;第二个控件是一个TabControl绑定到文档列表的控件。是TabControl ContentTemplate一个用户控件 control2,它有一个ListView. 我想将DataContextcontrol1 绑定到ListView所选选项卡的 control2 。这是代码:

<Window x:Class="deleteme.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:deleteme"
    xmlns:sc="clr-namespace:System.Collections;assembly=mscorlib"
    xmlns:s="clr-namespace:System;assembly=mscorlib"
    Title="Window1" Height="300" Width="300">
    <Window.Resources>
        <sc:ArrayList x:Key="Tabs">
            <local:Document Name="doc1" />
            <local:Document Name="doc2" />
            <local:Document Name="doc3" />
        </sc:ArrayList>
    </Window.Resources>
    <DockPanel>
        <local:control1 DockPanel.Dock="Left" />
        <TabControl DockPanel.Dock="Left" ItemsSource="{StaticResource Tabs}" SelectionChanged="TabControl_SelectionChanged">
            <TabControl.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Path=Name}" />
                </DataTemplate>
            </TabControl.ItemTemplate>
            <TabControl.ContentTemplate>
                <DataTemplate>
                    <local:control2 />
                </DataTemplate>
            </TabControl.ContentTemplate>
        </TabControl>
    </DockPanel>
</Window>

<UserControl x:Class="deleteme.control1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:deleteme"
    x:Name="control">
    <StackPanel>
        <ItemsControl ItemsSource="{DynamicResource Actions}">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <Button x:Name="actionButton" Content="{Binding Path=Text}" IsEnabled="{Binding Path=actionButton_IsEnabled}" Command="{Binding Path=Command}" CommandTarget="{Binding ElementName=control, Path=DataContext}" Click="actionButton_Click" />
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </StackPanel>
</UserControl>

<UserControl x:Class="deleteme.control2"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Grid>
        <ScrollViewer>
            <ListView x:Name="listView" ItemsSource="{Binding Items}" >
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding}" />
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>
        </ScrollViewer>
    </Grid>
</UserControl>

我想将 control2 的 绑定ListView到 control1 的原因有两个:我可以使用ListView.SelectedItemas 的参数RoutedCommand.Execute,我可以使用ListViewasCommandTarget以便我可以处理与 control2 中的文档相关的操作。

我的问题是我无法弄清楚如何将 control2 绑定ListView到 control1。实际上,由于我是 WPF 新手,我更有可能错误地解决了这个问题。如果有人有建议,我将不胜感激。

4

1 回答 1

1

不要考虑绑定列表视图,而是考虑绑定到数据。我假设您打算在两个用户控件之间使用数据;在这种情况下,只要您在树的上方有 DataContext,那么两个控件都可以访问它。

于 2009-09-06T20:28:50.030 回答