0


1

WPFコレクションオブジェクトまたは配列内の要素に個々のテキストボックスをバインドする

textblock.text`プロパティを監視可能なコレクションまたは配列要素の単一の要素にバインドし、 INotifyPropertyChanged`または `INotifyCollectionChanged`のいずれか最適な方を使用してテキストを更新する必要があります。

ほとんどの例では、リストボックスまたは他のリストビューをコレクション全体にバインドする方法を説明していますが、配列の1つまたは複数の要素の変更の通知に応じて、画面上の複数のテキストブロックを更新する必要があります。

textblock1.Text = MyArray(0)...
textblock2.Text = MyArray(1)...
textblock3.Text = MyArray(2)...
textblock4.Text = MyArray(3)...
etc...

単一のテキストブロックを単一の配列要素にバインドすることは可能ですか?

割り当てられた要素が変更された場合、1つ以上のテキストブロックを更新する適切なタイプの通知を取得することは可能ですか?

1 回答


2


WPFでは、いずれかの方法ですべてのことが可能です(または、通常は両方であり、さらに多くがあります)。

最初の簡単な部分-配列内のオブジェクトにINotifyPropertyChangedを適切に実装した場合、バインディングは適切に更新されるはずです。 INotifyCollectionChangedは、コレクション内の要素が変更された場合に通知します(つまり、 追加/削除されました)。

TextBlocksの未知の数(または既知の数でさえも、実際には問題ではない)を更新しようとしているようです。 おそらく、それを行うための最良の方法は、ItemsTemplate、およびオプションでItemsPanelで何らかの種類のItemsControl(ListBoxは1つ)を使用することです。 これは、コレクションの定義が変更された場合に維持する最も簡単な方法です。

たとえば、次のItemsControlの例があります。


ただし、個々のTextBlocksを本当にバインドしたい場合は、http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter.aspx [IValueConverter]を実装することでそれを行うことができます。 次に、各TextBlockをコレクションにバインドし、適切なインデックスでConverterParameterを使用します。 コンバーターは、そのインデックスで文字列の値を返すだけです。


MVVMを使用している場合、別の可能性として、配列の各要素にプロパティを設定し、それらのプロパティにバインドします。 しかし、あなたがそれをしているなら、そもそも配列の必要性に疑問を呈するでしょう。