У меня есть окно с двумя элементами управления: control1 - это элемент управления, в котором есть пучок кнопок, которые выполняют RoutedCommands
; второй элемент управления - TabControl
, который привязан к списку документов. TabControl
ContentTemplate
является пользовательским элементом управления, control2, который имеет ListView
. Я хотел бы привязать DataContext
элемента управления1 к ListView
элемента управления2 выбранной вкладки. Вот код:Привязка к выбранному содержимому TabItem
<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>
Причина, по которой я хочу, чтобы связать ListView
из Control2 к Control1 двояка: Я могу использовать ListView.SelectedItem
в качестве параметра RoutedCommand.Execute
, и я могу использовать ListView
как CommandTarget
, так что я может обрабатывать действия, относящиеся к документу в control2.
Моя проблема в том, что я не могу понять, как связать ListView
элемента управления2 с control1. На самом деле, это более вероятно, что я приближаюсь к проблеме неправильно, поскольку я новичок в WPF. Если у кого есть предложение, я был бы признателен.
Спасибо за ответ. Я могу привязываться к данным достаточно легко. Я не хочу делиться данными между элементами управления, хотя я хочу иметь возможность вызывать RoutedCommand.Execute из control1 с помощью control2 в качестве CommandTarget. – 2009-09-06 21:04:08