Динамическое добавление объектов в ComboBox и на Canvas

C# Программирование net


Примечание:
делаю так:
Hashtable Devices = new Hashtable();

ComboBox cBox = new ComboBox();
canvas.Children.Add(cBox);

UserControl usercontrol = new UserControl();
usercontrol.Name = "fr1";
Devices.Add(usercontrol.Name, usercontrol);
canvas.Children.Add(usercontrol);

Binding binding = new Binding();
binding.Mode = BindingMode.OneWay;
binding.Source = this.Devices;
binding.Path = new PropertyPath("Values");
cBox.SetBinding(ComboBox.ItemsSourceProperty, binding);

Теперь при раскрытии списка cBox появляется исключение NullReferenceException. А если убрать строку: canvas.Children.Add(usercontrol);, то все работает гладко. Получается нельзя добавлять обин и тот же объект и в хештайбл и на канвас. Это можно как-то обойти?

Примечание:
DisplayMemberPath помог, за что спасибо. но он помог показать строку. но как мне добавить не строку в ComboBox, а внешний вид контрола?

Примечание:
Очень познавательно ;), но не то. у меня есть список всех UserControl'ов в окне, которые будут находиться в нескольких канвасах. по запросу пользователь, нужно динамически создать ComboBox, в котором будет находится все UserControl'ы. ИМХО проще сделать привязку данных к ComboBox.ItemsSourceProperty, чем в цикле перебирать весь список и добавлять объекты в ComboBox.

Примечание:
а пример можно на счет ItemTemplate? просто я немного не пойму причем тут template вообще

Примечание:
на счет вернет значение ToString() - теоретически так, но почему-то не всегда так на практике, убедился из личного опыта. а вообще немного не то, что я хотел уведеть, но тему закрываю, т.к. дальше разобрался сам. да действительно нужно определить ItemTemplate. это некий аналог DisplayMemberPath, только намного круче с возможностями. спасибо за толчек в правильном направлении
Ответы:
ComboBox combo;
           canvas.Children.Add(combo = new ComboBox { Width = 200, FontSize = 20 });
           combo.Items.Add(new TextBlock { Text = "Hi", Foreground = Brushes.Red });
           combo.Items.Add(new TextBox { Text = "Write", Foreground = Brushes.YellowGreen });
           combo.Items.Add(new CheckBox { Content = "Check", Foreground = Brushes.Violet });
при том что при eval значений привязки в default комбобоксе используется DisplayMemberPath, он просто вернёт тебе значение .ToString() объекта из датасорса,
а SelectedItemTemplate который в ControlTemplate его отобразит как текст.


15 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.