« [P14] WPF: プリンター印刷(XPS) | トップページ | [P16] PowerShell:関数の引数および関数の戻り値が正しく受け取れず、おかしくなってしまう場合の対処法 »

[P15]WPF:ItemsSource が使用中で、ListBox.Items.Add メソッドが無効の場合

ListBox.Items.Add メソッドが下記の実行時エラーを出す場合がある。

『 ItemsSource が使用中の場合、Items.Add()操作は無効です。
   代わりに ItemsControl.ItemsSource を使用して要素にアクセスし、変更してください。』

正しくは、どういうコードを書くべきかよくわからず、調べても見あたりません。

[注]
    正しい書き方は、ItemsControl.ItemsSource を使用して、Add 操作をするという
 方向だと思うのですが、成功しません。(正しいコードがわかる方は、
  お教え下さい。) そこで、以下は苦肉の策です。

とりあえず、この場合には、以下のようなメソッドを作り、
ListBox.Items.Add() のコード部分を、下記のメソッド呼び出しに換えてやれば
まにあいます。

[String データを扱っている場合の例]

    public void AddFromItemsSource(ref ListBox lstBx, string addItem)
    {
        string[] ItemsArray = new string[lstBx.Items.Count+1];
        //現在のデータを全部保存する
        for (int i = 0; i < lstBx.Items.Count;i++ )
        {
            ItemsArray[i] = lstBx.Items[i] as string;
        }
        ItemsArray[lstBx.Items.Count] = addItem;
         //追加データを加えておく
        //-----------------
    //いったん、ItemsSource を null にする。
        lstBx.ItemsSource = null;
        lstBx.Items.Clear();
        //----------------
        lstBx.ItemsSource = ItemsArray;
    //データをセットする
    }

なお、ListBox.Items.Clear メソッドでも同様の事態が生じた場合には、
上記メソッド中にもあるように、その部分(ListBox.Items.Clear メソッド部分)を
以下のようにします。

        lstBx.ItemsSource = null;
        lstBx.Items.Clear();
    (結論的には、前に lstBx.ItemsSource = null; を付け加えるだけ)

以上

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
目次に戻る ・・・・ 左欄のカテゴリー 【パソコンの窓】 をクリック
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

|

« [P14] WPF: プリンター印刷(XPS) | トップページ | [P16] PowerShell:関数の引数および関数の戻り値が正しく受け取れず、おかしくなってしまう場合の対処法 »

コメント

コメントを書く



(ウェブ上には掲載しません)




« [P14] WPF: プリンター印刷(XPS) | トップページ | [P16] PowerShell:関数の引数および関数の戻り値が正しく受け取れず、おかしくなってしまう場合の対処法 »