c # привязка IDictionary с помощью списка - PullRequest
0 голосов
/ 07 января 2019

Я новичок в Windows формы и обучения. У меня есть простой код с формой, заполненной listbox1. Я пытаюсь заполнить его, привязав его к экземпляру IDictionary.

static IDictionary<string, string> Bind_Data = new Dictionary<string, string>();

    Binding myBinding = new Binding("DataSource", Bind_Data, "Key");   

    listBox1.DataBindings.Add(myBinding);

Я получаю следующую ошибку при запуске этого кода.

ошибка: System.Reflection.TargetInvocationException: средство доступа к свойству «Ключ» на объекте 'System.Collections.Generic.Dictionary`2 [[System.String, mscorlib, Версия = 4.0.0.0, Культура = нейтральная, PublicKeyToken = b77a5c561934e089], [System.String, mscorlib, Версия = 4.0.0.0, Культура = нейтральная, PublicKeyToken = b77a5c561934e089]] ' выдал следующее исключение: «Объект не соответствует типу цели». ---> System.Reflection.TargetException: объект не соответствует целевому типу. в System.Reflection.RuntimeMethodInfo.CheckConsistency (Цель объекта)

Действительно признателен, если кто-то может помочь мне понять эту ошибку.

Я могу использовать

listBox1.DataSource=new Binding(Bind_Data, null);
listBox1.ValueMemeber="Key";
listBox1.DisplayMember="Value";

Но я хочу использовать Binding

1 Ответ

0 голосов
/ 07 января 2019

Просмотр документов MSDN для этого конструктора: https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.binding.-ctor?view=netframework-4.7.2#System_Windows_Forms_Binding__ctor_System_String_System_Object_System_String_

Аргументом источника данных могут быть только определенные объекты - тип Dictionary не реализует IList, что, как я подозреваю, является причиной того, что вы получаете указанное выше исключение.

Если ваш базовый тип должен быть словарем, вы можете обернуть его в собственный класс, который реализует IList, чтобы получить желаемую привязку, в противном случае просто используйте второй стиль, который у вас есть выше

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...