1

次の方法でDataBindingを実行します

    private List<MyEditor> Editors { get; set; }
    private Dictionary<int,object> dictionary

    private void SetEditors()
    {
        Editors.Clear();

        foreach (var element in dictionary)
        {
            var editor = MyFactory.GetEditor();
            editor.DataBindings.DefaultDataSourceUpdateMode = DataSourceUpdateMode.OnPropertyChanged;
            editor.DataBindings.Add("Value", element, "Value");

            //some code

            Editors.Add(editor);

        }

        //some more code
    }

次に、GUIでの変更を行いますValue。その後Editors[0]、別のコードでdictionary要素から値を取得しようとしますが、Editors[0].DataBindings["Value"].WriteValue()データがに書き込まれるようにするために使用しますが、変更されていないことを確認しますdictionary

デバッガーでは、次の図を見ることができます。

    Editors[0].DataBindings["Value"]    {System.Windows.Forms.Binding}  System.Windows.Forms.Binding
            ....
    DataSource  {[0, oldValue]} object {System.Collections.Generic.KeyValuePair<int,object>}
            ....

その間

    Editors[0].Value    "newValue"  object {string}

どうなり得るか?どんなアイデアにも感謝します。

4

1 に答える 1

1

正しくフォローしているかどうかはわかりませんが、辞書を列挙すると、取得したKeyValuePair(KVP)オブジェクトが列挙時に作成されるというのが答えだと思います。もう一度列挙すると、別のオブジェクトのセットが得られます。これは、KVPが値型であるためです。

KVPによって参照されるものを変更するには、元のディクショナリオブジェクトに戻る必要があります。データバインディングはそれを行いません。

于 2012-11-28T17:46:00.460 に答える