Bind Dictionnaire ItemsControl en C # / WPF
-
11-09-2019 - |
Question
Je suis en train de lier KeyValuePair éléments d'un dictionnaire à un ItemsControl. Mon dictionnaire a 15 éléments et le code suivant me montre 15 TextBoxes:
<WrapPanel Name="PersonsWrapPanel" Grid.Row="0">
<ItemsControl ItemsSource="{Binding Persons}" >
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal" Width="auto">
</WrapPanel>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBox Text="{Binding Value.Text}"></TextBox>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</WrapPanel>
Malheureusement, sans aucun contenu TextBox (ce qui serait la clé ou la valeur). Toutes les idées?
La solution 2
Je l'ai résolu en utilisant cette ligne:
<TextBox Text="{Binding Value, Mode=OneWay}"></TextBox>
Le code sur http :. //www.dev102.com/2008/03/07/binding-a-wpf-control-to-a-dictionary/ ne semble pas fonctionner
Autres conseils
Peut-être essayer lier directement aux valeurs du dictionnaire:
ItemsSource="{Binding Persons.Values}"
Si je comprends votre XAML correctement, chaque objet dans le dictionnaire a un champ appelé « Texte » auquel vous essayez de lier. Si oui et vous apportez les modifications ci-dessus, vous devrez changer votre DataTemplate ainsi:
<TextBox Text="{Binding Text}" />
Voir cet article pour plus d'informations. HTH.
Disons que vous avez un dictionnaire appelé RowValues, à la fois la [clé, valeur] définie comme [string, string].
Maintenant, pour se lier à la NVP de ce dictionnaire, vous pouvez faire ce qui suit:
<ItemsControl ItemsSource="{Binding RowValues.Values}" >
Pour afficher le texte (valeur), vous pouvez lier comme:
<TextBlock Text="{Binding}"/>