Привязка к свойству, дающему коллекцию. Он вступает в силу при каждом изменении самого экземпляра коллекции, а не при изменении элементов в коллекции.
Существует несколько способов добиться желаемого поведения, в том числе:
1) Свяжите ItemsControl
с коллекцией и настройте ItemTemplate
для вывода текста, которому предшествует запятая, если это не последний элемент в коллекции. Что-то вроде:
<ItemsControl ItemsSource="{Binding Items}">
<ItemsControl.ItemTemplate>
<TextBlock>
<TextBlock Visibility="{Binding RelativeSource={RelativeSource PreviousData}, Converter={StaticResource PreviousDataConverter}}" Text=", "/>
<TextBlock Text="{Binding .}"/>
</TextBlock>
</ItemsControl.ItemTemplate>
</ItemsControl>
2) Напишите код в своем коде для отслеживания изменений в коллекции и обновите отдельное свойство, объединяющее элементы в один string
. Что-то вроде:
public ctor()
{
_items = new ObservableCollection<string>();
_items.CollectionChanged += delegate
{
UpdateDisplayString();
};
}
private void UpdateDisplayString()
{
var sb = new StringBuilder();
//do concatentation
DisplayString = sb.ToString();
}
3) Напишите свой собственный подкласс ObservableCollection<T>
, который содержит отдельную объединенную строку, аналогичную # 2.