2009-09-06 4 views
0

У меня есть окно с двумя элементами управления: control1 - это элемент управления, в котором есть пучок кнопок, которые выполняют RoutedCommands; второй элемент управления - TabControl, который привязан к списку документов. TabControlContentTemplate является пользовательским элементом управления, 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. Если у кого есть предложение, я был бы признателен.

ответ

1

Не думайте в терминах связывания списка, подумайте в терминах привязки к данным вместо этого. Я предполагаю, что вы намерены использовать данные между двумя пользовательскими элементами управления; в этом случае, если у вас есть DataContext выше дерева, то оба элемента управления могут получить к нему доступ.

+0

Спасибо за ответ. Я могу привязываться к данным достаточно легко. Я не хочу делиться данными между элементами управления, хотя я хочу иметь возможность вызывать RoutedCommand.Execute из control1 с помощью control2 в качестве CommandTarget. – 2009-09-06 21:04:08

 Смежные вопросы

  • Нет связанных вопросов^_^