Использование строки [] в XAML
Вы можете создать экземпляр свойства Ключевые слова в XAML следующим образом:
<MyControl ...>
<MyControl.Keywords>
<sys:String>Happy</sys:String>
<sys:String>Sad</sys:String>
<sys:String>Angry</sys:String>
</MyControl.Keywords>
</MyControl>
Примечание. Это предполагает объявление пространства имен
xmlns:sys="clr-namespace:System;assembly=mscorlib"
Вы можете привязать ItemsControl к своим ключевым словам следующим образом:
<ListBox ItemsSource="{Binding Keywords}" ...>
В этом примере каждое ключевое слово будет отображаться как отдельный элемент ListBox.
Использованиеstring [] для этой цели в WPF является совершенно кошерным, поскольку гарантируется, что члены массива никогда не изменятся (вы можете заменить массив новым, но не изменять его элементы).Это связано с тем, что в массиве отсутствует механизм уведомления об изменениях.
Если ваши элементы могут измениться
Если элементы вашего массива ключевых слов могут измениться, вместо этого следует использовать ObservableCollection.массива.Сделайте его доступным только для чтения свойством CLR (не свойством зависимости) и инициализируйте его в своем конструкторе.Затем вы можете заполнить его в XAML точно так, как показано выше, но любые изменения в коллекции будут немедленно отражены в вашем пользовательском интерфейсе.
Я фактически использую для этого свои собственные классы коллекции, которые имеют гораздо больше функциональных возможностей, чем ObservableCollection.Неважно, какой класс коллекции вы используете, если он реализует INotifyCollectionChanged.
Обеспечение возможности обновления списка с использованием чистого XAML
Вы не можете обновить массив Ключевые слова с помощьюСвязывание.Если вам нужно обновить ключевые слова и сделать это полностью, используя XAML и привязки, вам нужно создать класс объектов Keyword, содержащий строку, а затем поместить их в ObservableCollection или аналогичное.
IValueConverter
Другой подход заключается в использовании IValueConverter для преобразования разделенного запятыми списка строк в строку и из нее [], например:
<TextBox Text="{Binding Keywords,
Converter={x:Static my:CommaSeparatedConverter.Instance}}" />
, где преобразовательбудет:
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(',');
}
}