Je souhaite lier sélectivement des données d'une collection à différents éléments de l'interface utilisateur. Par exemple, j'ai une collection d'objets où chaque objet a une propriété qui décrit le type de cet objet. J'utilise actuellement un DataTemplate pour catégoriser les éléments. Mais lorsque je propose la collection à deux conteneurs d'interface utilisateur différents malgré la disponibilité de DataTemplates, les objets sont ajoutés aux deux conteneurs. code suivant rendrait la question plus claire:Liaison sélective de données à une collection
Vue:
données Modèles:
<DataTemplate x:Key="ColumnDataTemplate">
<Label DataContext="{Binding ColumnDiscriptor}" Foreground="White" Background="DarkOrange" BorderThickness="5">
<TextBlock Text="{Binding ColumnName}">
<!--<Run Text="{Binding TableName}"/><Run Text="."/><Run Text="{Binding ColumnName}"/>-->
</TextBlock>
</Label>
</DataTemplate>
<DataTemplate x:Key="ControllerDataTemplate">
<Label Content="{Binding OperatorValue}" Foreground="White" Background="Crimson" BorderThickness="5">
</Label>
</DataTemplate>
<DataTemplate x:Key="ValueDataTemplate">
<TextBox Text="{Binding Path=ComparedValue, Mode= TwoWay}" Height="24" HorizontalAlignment="Left" Width="46" />
</DataTemplate>
<DataTemplate x:Key="JoinDataTemplate">
<Grid>
<!--<Run Text="{Binding TableName}"/><Run Text="."/><Run Text="{Binding ColumnName}"/>-->
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="80*"/>
</Grid.RowDefinitions>
<Label Grid.Row="0" Grid.Column="0" DataContext="{Binding ColumnDiscriptor}" Foreground="Black" Background="Brown" BorderThickness="5">
<TextBlock Text="{Binding ColumnName}">
</TextBlock>
</Label>
<Label Grid.Row="0" Grid.Column="1" DataContext="{Binding JoinWithColumnDescriptor}" Foreground="Black" Background="Beige" BorderThickness="5">
<TextBlock Text="{Binding Path=ColumnName}">
</TextBlock>
</Label>
</Grid>
</DataTemplate>
<local:QueryObjectDataTemplateSelector x:Key="ModelSelector"
ColumnTemplate="{StaticResource ColumnDataTemplate}"
ControllerTemplate="{StaticResource ControllerDataTemplate}"
ValueTemplate="{StaticResource ValueDataTemplate}"
/>
conteneurs UI:
<ListBox Height="146" HorizontalAlignment="Left" Margin="12,38,0,0" Name="visulaqueryPanel" VerticalAlignment="Top" Width="344" Background="#18EBEBE2" AllowDrop="True" Drop="Item_Drop" DragEnter="Item_DragEnter" ItemsSource="{Binding ViewUIElements}" ItemsPanel="{StaticResource WrapPanelTemplate}"
ItemTemplateSelector="{StaticResource ModelSelector}" SelectedItem="{Binding Path=SelectedDesignerVisualQueryObject}"/>
<ListBox AllowDrop="True" Background="#1CFFFFFF" Margin="10,38,6,39" Name="grid1" Drop="Join_Item_Drop" DragEnter="Item_DragEnter" ItemsSource="{Binding ViewUIElements}" ItemTemplate="{StaticResource JoinDataTemplate}" SelectedItem="{Binding Path=SelectedDesignerVisualQueryObjectJoin}" />
Selon mon problème ViewUIElemetns est la collection qui se composent de les objets qui sont de types différents.
Merci d'avance.
Salut Elad, je vous remercie beaucoup pour la réponse. Mais ce n'est pas très clair pour moi. Si possible, pourriez-vous relier la réponse au code que j'ai fourni? Je suis errant quant à la façon dont je peux utiliser une propriété de chaîne avec un objet d'une collection pourrait être utilisé comme un paramètre de type; Je suis confus. Merci encore. –
Le faire en fonction du type est meilleur IMO, mais si vous devez sélectionner en fonction d'une propriété, alors je suggère d'utiliser DataTemplateSelector http://www.switchonthecode.com/tutorials/wpf-tutorial-how-to-use-a- datatemplateselector –
Salut Elad, merci pour ça. Je vais essayer de mettre un commentaire. –