powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Исключение при добавлении таба
11 сообщений из 11, страница 1 из 1
Исключение при добавлении таба
    #37270659
enigmatic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.

Есть форма, на ней листбокс и табконтрол. Листбокс выполняет роль меню, табконтрол - роль вкладок, как в браузере.
По нажатию на элемент меню появляется новая вкладка с соответствующим ей контентом.



Проблема в том, что при добавлении второй вкладки возникает исключение:
Значение не попадает в ожидаемый диапазон.
в MS.Internal.XcpImports.CheckHResult(UInt32 hr)
в MS.Internal.XcpImports.SetValue(IManagedPeerBase obj, DependencyProperty property, DependencyObject doh)
в MS.Internal.XcpImports.SetValue(IManagedPeerBase doh, DependencyProperty property, Object obj)
в System.Windows.DependencyObject.SetObjectValueToCore(DependencyProperty dp, Object value)
в System.Windows.DependencyObject.SetEffectiveValue(DependencyProperty property, EffectiveValueEntry& newEntry, Object newValue)
в System.Windows.DependencyObject.UpdateEffectiveValue(DependencyProperty property, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, ValueOperation operation)
в System.Windows.DependencyObject.SetValueInternal(DependencyProperty dp, Object value, Boolean allowReadOnlySet)
в System.Windows.Controls.ContentControl.set_Content(Object value)
в SilverlightApplication1.Services.TabConverter.Convert(Object value, Type targetType, Object parameter, CultureInfo culture)

Исключение возникает в конвертере при добавлении второй вкладки:
TabConverter
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
    public class TabConverter : IValueConverter {

        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
            try {
                var object_data = value as ObservableCollection<TabModel>;
                var result = new List<TabItem>();
                foreach (var item in object_data) {
                    result.Add(new TabItem() { Header = item.Header, Content = item.Content });
                }
                return result;
            } catch (Exception e) {
                MessageBox.Show(e.StackTrace, e.Message, MessageBoxButton.OK);
                return null;
            }
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
            throw new NotImplementedException();
        }
    }


Почему срабатывает исключение?
...
Рейтинг: 0 / 0
Исключение при добавлении таба
    #37271245
Руки-крюки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
enigmatic,

Вы каждый раз пересоздаете все вкладки? А не проще завязать ItemSource на ObservableCollection открытых вкладок?
...
Рейтинг: 0 / 0
Исключение при добавлении таба
    #37271283
enigmatic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Руки-крюки,

ItemsSource и так завязан на ObservableCollection открытых вкладок, но дефолтный табконтрол не слушает ее CollectionChanged.
Т.е. вкладки можно хоть в List'е хранить.
...
Рейтинг: 0 / 0
Исключение при добавлении таба
    #37271324
Руки-крюки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
enigmatic,

Это еще почему? Смотреть пример .
...
Рейтинг: 0 / 0
Исключение при добавлении таба
    #37271349
enigmatic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Руки-крюки,

Дело в том, что у меня Silverlight :)
Прошу прощения, что не сказал сразу же.
...
Рейтинг: 0 / 0
Исключение при добавлении таба
    #37271357
Руки-крюки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
enigmatic,

Хм, странно. В WPF точно все работает. В SL не знаю, может вы просто забыли в проперти OC вызывать OnPropertyChanged?
...
Рейтинг: 0 / 0
Исключение при добавлении таба
    #37271408
Руки-крюки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
enigmatic,

Попробовал на SL. Тупой таб контрол, трудно было чтоли ContentPresenter поставить, где надо. Оторвать бы руки тому, кто его делал =)
...
Рейтинг: 0 / 0
Исключение при добавлении таба
    #37271432
enigmatic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Руки-крюки,

Табконтрол сильверлайта вообще отдельная песня, в нем нельзя указать источником ItemsSource напрямую ObservableCollection<string>. Только через конвертер, приведя к IEnumerable<TabItem>.

авторв проперти OC вызывать OnPropertyChanged
В сеттере Tabs есть вызов OnPropertyChanged.

Тут проблема не в создании вкладок, а в задании контента для них, потому что если не задавать контент вкладки в конвертере, то пустые вкладки нормально создаются.
Вы не могли бы посмотреть пример из первого поста?
Там почти MVVM, только команды не используются.
Кажется я просто где-то натупил со способом задания контента.
...
Рейтинг: 0 / 0
Исключение при добавлении таба
    #37271440
enigmatic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Руки-крюки,

Да :)
...
Рейтинг: 0 / 0
Исключение при добавлении таба
    #37271612
Руки-крюки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
enigmatic,

Можно попробовать переопределить шаблон таб контрола. Сделать его похожим на WPF.
...
Рейтинг: 0 / 0
Исключение при добавлении таба
    #37280558
enigmatic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Руки-крюки,

Дело в том, что эта ошибка сначала возникла с телериковским табконтролом, а затем, когда попробовал смоделировать на дефолтном, и на нем тоже.
Думалось, дело в задании контента, но похоже это не так. Ссылки с гугла ведут и на сильверлайтовский, и на телериковский форум, так что возможно это проблема обоих табконтролов.
Возможно дело в этом :
In this case it happens because of a bug in Silverlight where the parent of the visuals is not cleared when they are changed using databinding. (In fact it is, but only for built-in a.k.a core dependency properties).
Потому что, когда сделал без использования привязки, возникла проблема очистки контента (кроме удаления вкладок из самого контрола и ссылок на них, нужно было еще очистить свойство контента этих вкладок). Возможно в этой теме проблема та же.

Пока создал тему на SL форуме и отложил.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Исключение при добавлении таба
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]