2019年7月20日土曜日

VB バインディングに関して (脱線気味)

バインド と言うと、クラスが出て来るのが 常套句 ですね。
本来、クラス設計をしなければいけないケースでも、
時と場合によっては、
配列を個々の要素に持つ コレクション で逃げてしまう 手も有り! と思います。


例えば、次の様な Class の変数 (Field) を定義し、ロジックを組み立てていたとします。

        Friend listItems1 As New List(Of Integer)
        Friend listItems2 As New List(Of String)
        Friend listItems3 As New List(Of String)

同一 Index が、様々な内容を保持する 変数群 を調整しているケースですね。
ある事柄に対して、listItemsX 群 に .Add(value) を不足無く行い、データ保持しています。

でも、途中から、一覧表示が欲しくなったら ... 。
WPF なら、Binding で ... となる訳ですが、
それには、分かり易く、新たな これ用の Class を設けて、アクセスさせるのが常道の筈です。

まだ Project が駆け出しの状態であるなら、
その様に、方針転換して、コツコツと直しますが、
単に、一箇所の一覧表示の為だけに Class を立て、
上手く動いている数多の部分の手直しをするのも 大変! だと感じたなら、
以下の様な方法で逃げてしまう手もあります。

        Dim viewSource As New Collections.ObjectModel.ObservableCollection(Of String())
        For i As Integer = 0 To listItems1.Count - 1
            viewSource.Add(New String() {listItems1(i).ToString,
                                         listItems2(i),
                                         listItems3(i)})
        Next
        Me.ListView2RenRules.ItemsSource = viewSource

配列に直した個々のデータを ObservableCollection に取り込んでバインドです。

これは、正に、逃げの手! です。
単に、一覧表示させたいが為に打つ 非常手段 です。

システム設計に不備があって、
根本から直すべき、なのかも知れません。

でも、
そんな逃げ手を知っていれば、変に、悩まなくて済みますから。



種を明かせば、

実は、これ、 Project が持つ設定条件 ( VB で言う My.Setting ) の、
Collections.Specialized.StringCollection を表示させる時に、
生データそのものでなく、
分かり易い様に加工の上、一覧表示させるものでした。

更に、元々、個人環境に合わせて、ハードコーディングしていた部分を、
設定値として、外部に切り出したものです。
内部では、List に取り込ませた上で、保持して活用しています。
つまり、主たる部分ではなく、環境設定に係わる 附加 部分です。
ですから、滅多に、それ(一覧表示)を利用する機会は少なくて、
つい、逃げ手 に走ったのです。



0 件のコメント:

コメントを投稿