バインディングは、コレクションを生成するプロパティです。コレクション内の項目が変更されたときではなく、コレクションインスタンス自体が変更されるたびに有効になります。
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)#2と同様の独立した連結文字列を維持し、独自のObservableCollection<T>
サブクラスを書きます。
ように私は実際にItemsTemplateのアプローチを使用してオフに開始したことになるが、コードレビューの際に、我々はそれが簡単になるだろうと思いました観察されたコレクションが変更されたときにバインディングが更新されると考えて、マルチバインディングコンバータを使用してください。私はその方法に戻ってきます:)ありがとう! –
例のItemsControl.ItemTemplateと最初のTextBlock要素の間にDataTemplateがありません。 – jpierson