J'ai une fenêtre avec deux contrôles: control1 est un contrôle qui a un tas de boutons qui exécutent RoutedCommands
; le deuxième contrôle est un TabControl
lié à une liste de documents. Le TabControl
ContentTemplate
est un contrôle utilisateur, control2, qui a un ListView
. Je voudrais lier le DataContext
de control1 au ListView
de control2 de l'onglet sélectionné. Voici le code:Liaison au contenu TabItem sélectionné
<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>
La raison pour laquelle je veux lier le ListView
de Control2 à Control1 est double: je peux utiliser ListView.SelectedItem
comme paramètre à RoutedCommand.Execute
, et je peux utiliser le ListView
comme CommandTarget
pour que je peut gérer les actions relatives à un document dans control2.
Mon problème est que je ne peux pas comprendre comment lier le ListView
de control2 à control1. En fait, il est plus probable que j'aborde mal le problème car je suis nouveau à WPF. Si quelqu'un a une suggestion, je l'apprécierais.
Merci pour la réponse. Je peux lier assez facilement les données. Je ne veux pas partager les données entre les contrôles cependant - je veux être capable d'appeler RoutedCommand.Execute de control1 en utilisant control2 comme CommandTarget. –