Модераторы: gambit, Kefir, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> добавление объека в список, на панель и в ComboBox, исключение NUllReferenceException 
:(
    Опции темы
Capflint
  Дата 28.4.2010, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 23.5.2008
Где: Донецк

Репутация: нет
Всего: нет



проблема:

есть несколько UserControl'ов, которые находятся на панели Canvas, и несколько FrameworkElement'ов. каждый FrameworkElement хранит ссылку на UserControl. причем несколько FrameworkElement могут ссылаться на один UserControl.
для выбора на какой UserControl ссылаться, есть ComboBox, в котором должны отображаться все UserControl'ы. как это сделать?

пробывал так:
Код
UserControl usercontrol = new UserControl();
usercontrol.Name = "uc1";
canvas.Children.Add(usercontrol);
ComboBox combobox = new ComboBox();
canvas1.Children.Add(combobox);
Binding binding = new Binding();
binding.Source = canvas;
binding.Path = new PropertyPath("Children");
combobox.SetBinding(ComboBox.ItemsSourceProperty, binding);


При раскрытии списка возникает исключение NullReferenceException. Если добавить строку

Код

combobox.DisplayMemberPath = "Name";


то в раскрытом списке появляется имя UserControl (uc1) user posted image, но при выборе элемента списка combobox пуст user posted image. но все равно это не выход. так должно отображаться имя UserControl'а, а мне нужен его внешний вид (сам UserControl). 

Помогите кто может!!!!! smile 

Это сообщение отредактировал(а) Capflint - 28.4.2010, 16:00
PM MAIL   Вверх
Sartorius
Дата 28.4.2010, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: 1
Всего: 37



Зачем все в коде пишете? Сбиндите в XAML-е ItemsSource у комбобокса к ObservableCollection ваших контролов 

Код

<ComboBox  ItemsSource="{Binding MyControls, Mode=OneWay}"/>


ЗЫ 
 Один инстанс контрола может только один раз в дереве видимости появляться

Это сообщение отредактировал(а) Sartorius - 28.4.2010, 16:14
PM MAIL ICQ   Вверх
Capflint
Дата 28.4.2010, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 23.5.2008
Где: Донецк

Репутация: нет
Всего: нет



Цитата(Sartorius @  28.4.2010,  16:13 Найти цитируемый пост)
Зачем все в коде пишете? 

потому что все будет происходить динамически: добавление контролов, формирование списка и даже создание канваса. да и вообще, я просто сишный код лучше воспринимаю, чем xaml. не привык еще.

Цитата(Sartorius @  28.4.2010,  16:13 Найти цитируемый пост)
Сбиндите в XAML-е ItemsSource у комбобокса к ObservableCollection ваших контролов

если можно немного поподробнее. какая разница к какой коллекции будет привязка: UIElementCollection или ObservableCollection. а может List<T> или Hashtable?

Цитата(Sartorius @  28.4.2010,  16:13 Найти цитируемый пост)
Один инстанс контрола может только один раз в дереве видимости появляться

тогда получается, что задача не решаема? 


Это сообщение отредактировал(а) Capflint - 28.4.2010, 21:51
PM MAIL   Вверх
Sartorius
Дата 29.4.2010, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: 1
Всего: 37



Цитата(Capflint @  28.4.2010,  22:50 Найти цитируемый пост)
если можно немного поподробнее. какая разница к какой коллекции будет привязка

ObservableCollection умеет уведомлять подписчиков об изменениях (добавление, удаление элементов). Если после биндинга менять коллекцию не собираетесь - подойдет все что реализует IEnumerable

Цитата(Capflint @  28.4.2010,  22:50 Найти цитируемый пост)
тогда получается, что задача не решаема? 

Нужно создать копию контрола и добавлять в комбо ее

Это сообщение отредактировал(а) Sartorius - 29.4.2010, 12:13
PM MAIL ICQ   Вверх
Capflint
Дата 29.4.2010, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 23.5.2008
Где: Донецк

Репутация: нет
Всего: нет



Цитата(Sartorius @  29.4.2010,  12:12 Найти цитируемый пост)
ObservableCollection умеет уведомлять подписчиков об изменениях (добавление, удаление элементов)

Это я и так знаю. я не вижу как это мне может помочь. комбобокс у меня существует не всегда, а только тогда, когда потребует пользователь. поэтому, и уведомлять об изменениях нечего

Цитата(Sartorius @  29.4.2010,  12:12 Найти цитируемый пост)
Нужно создать копию контрола и добавлять в комбо ее

как это сделать. после добывления контрола в окно, он может поменять целую кучу свойств (цвет фона, границы, надписи или какие-то свои). а надо, чтоб добавлялся контрол именно такой, какой он есть в данный момент
PM MAIL   Вверх
Sartorius
Дата 29.4.2010, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: 1
Всего: 37



Цитата(Capflint @  29.4.2010,  13:19 Найти цитируемый пост)
а надо, чтоб добавлялся контрол именно такой, какой он есть в данный момент 

 Добавьте метод, который позволяет создать копию контрола. Если контрол действительно сложный и содержит пару десятков изменяемых свойств, помещать его в комбо неправильно
PM MAIL ICQ   Вверх
Capflint
Дата 29.4.2010, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 23.5.2008
Где: Донецк

Репутация: нет
Всего: нет



а как тогда быть? может предложите свой способ?

П.С. в принципе, можно сделать и вообще без привязки данных
Код

combobox.ItemsSource = canvas.Children;

Не знаю зачем вообще я привязку сюда влепил

Это сообщение отредактировал(а) Capflint - 29.4.2010, 12:59
PM MAIL   Вверх
Sartorius
Дата 29.4.2010, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: 1
Всего: 37



Цитата(Capflint @  29.4.2010,  13:52 Найти цитируемый пост)
а как тогда быть? может придложите свой способ?
 
Если нужно изображение контрола в комбо, можно использовать WritableBitmap http://blogs.microsoft.co.il/blogs/alex_go...ablebitmap.aspx
Рендерим контрол в него, ресайзим как надо (типа thumbnail-а получается) и сорцем в Image, а Image в комбо. Как-то так
PM MAIL ICQ   Вверх
Capflint
Дата 29.4.2010, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 23.5.2008
Где: Донецк

Репутация: нет
Всего: нет



Спасибо за помощь. я думаю это поможет. но есть еще вопрос:
Цитата(Capflint @  28.4.2010,  15:50 Найти цитируемый пост)
При раскрытии списка возникает исключение NullReferenceException. Если добавить строкукод C#1:combobox.DisplayMemberPath = "Name";highlightSyntax('csharp_ZDkyMm','csharp');то в раскрытом списке появляется имя UserControl (uc1) , но при выборе элемента списка combobox пуст .

может сталкивались с этим или знаете в чем причина?


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.0470 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.