En utilisant une chaîne [] dans XAML
Vous pouvez instancier keywords en XAML comme suit:
<MyControl ...>
<MyControl.Keywords>
<sys:String>Happy</sys:String>
<sys:String>Sad</sys:String>
<sys:String>Angry</sys:String>
</MyControl.Keywords>
</MyControl>
Note: Ceci suppose la déclaration d'espace de noms
xmlns:sys="clr-namespace:System;assembly=mscorlib"
Vous peut lier un ItemsControl à vos mots clés comme suit:
<ListBox ItemsSource="{Binding Keywords}" ...>
Dans cet exemple, chaque mot clé apparaîtra sous la forme d'un élément ListBox distinct. L'utilisation d'une chaîne [] à cet effet dans WPF est parfaitement kasher, tant que les membres du groupe sont garantis de ne jamais changer (vous pouvez remplacer le tableau par un nouveau, mais ne pas changer ses éléments). C'est parce qu'un tableau n'a aucun mécanisme de notification de changement.
Si vos éléments peuvent changer
Si les éléments de votre tableau Mots-clés peuvent changer, vous devez utiliser un ObservableCollection au lieu d'un tableau. Faites-en une propriété CLR en lecture seule (pas une propriété de dépendance) et initialisez-la dans votre constructeur. Ensuite, vous pouvez le remplir en XAML exactement comme indiqué ci-dessus, mais toutes les modifications apportées à la collection seront immédiatement répercutées dans votre interface utilisateur.
J'utilise en fait mes propres classes de collection pour cela qui ont beaucoup plus de fonctionnalités que ObservableCollection. La classe de collection que vous utilisez n'a pas d'importance tant qu'elle implémente INotifyCollectionChanged.
Faire la liste actualisable en utilisant XAML pur
Vous ne pouvez pas mettre à jour vos mots-clés tableau en utilisant une liaison. Si vous devez mettre à jour les mots-clés et que vous voulez le faire entièrement en utilisant XAML et les liaisons, vous devez créer une classe d'objet Keyword qui contient la chaîne, puis les placer dans un ObservableCollection ou similaire.
IValueConverter
Une autre approche consiste à utiliser un IValueConverter pour convertir une liste séparée par des virgules des chaînes vers et à partir d'une chaîne [], comme ceci:
<TextBox Text="{Binding Keywords,
Converter={x:Static my:CommaSeparatedConverter.Instance}}" />
où le convertisseur serait :
public class CommaSeparatedConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return string.Join(",", (string[])value);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return ((string)value).Split(',');
}
}
Je reçois une erreur sur x: Array (Le type 'x: Array' n'a pas été trouvé). Plus tôt dans le document xmlns: x est défini comme "http://schemas.microsoft.com/winfx/2006/xaml", et x: fonctionne comme d'habitude ailleurs dans la page. – Hounshell
En outre, y a-t-il une manière plus WPF-ish de faire ceci? Comme une collection observable ou quelque chose. Je ne vais pas mettre à jour la liste, juste la vérifier de temps en temps. – Hounshell
Puisque les mots-clés sont déclarés en tant que chaîne [], vous n'avez pas réellement besoin de la syntaxe x: Array dans le code XAML. Je l'ai enlevé de ma réponse. (Je suis déconcertée de savoir pourquoi cela n'a pas fonctionné pour vous: j'utilise x: Array fréquemment et ça sonnait comme si vous le faisiez correctement.) J'ai également ajouté plus d'informations sur quand et pourquoi vous pourriez utiliser ObservableCollection au lieu de x: Array. –