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

Хороший день,

У меня есть combobox, который я населяю через CollectionViewSource. Пункты, строят хотя datatemplate для поступающего типа изделия (в этом случае ProjectViewModel). Это находится в wpf в.NET 4.0.

В моем window.resources я определил следующее:

    

Несмотря на этот стиль, я все еще получаю следующие ошибки:

Система. Windows. Ошибка данных: 4: не Может найти источник для закрепления с ссылка 'RelativeSource FindAncestor, AncestorType ='System. Windows. Средства управления. ItemsControl', AncestorLevel = '1''. BindingExpression:Path=HorizontalContentAlignment; DataItem=null; целевой элемент - 'ComboBoxItem' (Имя = ''); цель собственность - 'HorizontalContentAlignment' (напечатайте 'HorizontalAlignment')

Система. Windows. Ошибка данных: 4: не Может найти источник для закрепления с ссылка 'RelativeSource FindAncestor, AncestorType ='System. Windows. Средства управления. ItemsControl', AncestorLevel = '1''. BindingExpression:Path=VerticalContentAlignment; DataItem=null; целевой элемент - 'ComboBoxItem' (Имя = ''); цель собственность - 'VerticalContentAlignment' (напечатайте 'VerticalAlignment')

Я определил Горизонтальный и Вертикальный ContentAlignment на элементе ComboBox также, напрасно. Это не ужасная проблема, поскольку пункты появляются правильно. однако, отлаживая, я действительно добираюсь о 10-секундной задержке, закрывая окно, в то время как оно производит приблизительно 4000 сообщений об ошибках к окну вывода (который я должен открыть, чтобы зафиксировать законные ошибки привязки.

Я могу не читать ошибку правильно. Почему это не может найти действительный источник для закрепления? Насколько я знаю, способ, которым я использую ComboBox, и CollectionViewSource соответствует их намерению.

2
nl ja de
@DJBurb Эти два предложения в том вопросе - по существу то же самое как стиль, который я имею в своем решении. Я попробовал стиль на app.xaml уровне, и я попытался назвать его как имя типа aslo. Никакие изменения. Что-то странное в движении в Кругу K.
добавлено автор CodeWarrior, источник
Я думаю, что кто-то зафиксировал это здесь: stackoverflow.com/questions/2666439/…
добавлено автор DJ Burb, источник

3 ответы

Я просто хочу упомянуть, что я боролся с этой проблемой в течение двух дней. Наиболее распространенное предложенное решение (добавляющий Стиль Horizontal/VerticalContentAlignment к вашему элементу, или даже к App.xaml) не всегда решает проблему.

Eventually, I discovered something unique to my own situation - I hope it can be of help to someone: If you are using the FilterEventHandler, don't unsubscribe it before resubscribing!

Мой старый код продолжил производить ту "Ошибку Данных 4" сообщения каждый раз, когда я изменил Фильтр Канала (который называет UpdateCorporatesList):

// This code generates errors
private void UpdateCorporatesList()
{
    this.CorporatesViewSource.Filter -= new FilterEventHandler(ApplyCorporateFilter);

    if (this.ChannelFilter != null)
    {
        this.CorporatesViewSource.Filter += new FilterEventHandler(ApplyCorporateFilter);
    }
    else
    {
        this.CorporateFilter = null;
    }
}

private void ApplyCorporateFilter(object sender, FilterEventArgs e)
{
    SalesCorporate customer = e.Item as SalesCorporate;
    var currentChannel = this.Channels.FirstOrDefault(x => x.ID == this.ChannelFilter).Description;
    if ((customer.ID != null) && (customer.Channel != currentChannel))
    {
        e.Accepted = false;
    }
}

... таким образом, я изменил его, чтобы повторно подписаться на FilterEventHandler, каждый раз, и скорее помещать проверку на пустой указатель на Канале Просачивается метод обработки событий.

// This code works as intended
private void UpdateCorporatesList()
{
    this.CorporatesViewSource.Filter += new FilterEventHandler(ApplyCorporateFilter);

    if (this.ChannelFilter == null)
    {
        this.CorporateFilter = null;
    }
}

private void ApplyCorporateFilter(object sender, FilterEventArgs e)
{
    var currentChannel = this.Channels.FirstOrDefault(x => x.ID == this.ChannelFilter);
    if (currentChannel.ID == null)
    {
        return;
    }

    SalesCorporate customer = e.Item as SalesCorporate;
    if ((customer.ID != null) && (customer.Channel != currentChannel.Description))
    {
        e.Accepted = false;
    }
}

И Вуаля! Больше ошибок:-)

3
добавлено

Я думал, что решил эту проблему в своей собственной программе, но нашел, что это продолжало появляться периодически. Наконец управляемый, чтобы разыскать источник проблемы.

При использовании combobox, поддержанный ICollectionView , и вы складываете два или больше collectionView. Освежительный напиток() обращается к очереди событий (т.е.: запрос освежает дважды из-за двух различных операций очистки, например), который заставит его производить спам ошибки привязки на каждом элементе combobox для каждого дополнительного Освежительный напиток() сделанный звонок. Эта ошибка привязки только произойдет после того, как вы откроете combobox, по крайней мере, однажды.

Переписывание его так, чтобы вы только звонили Освежительный напиток() , как только для данного события будет препятствовать тому, чтобы ошибка привязки появилась.

1
добавлено

Я не знаю, нуждаетесь ли вы все еще в помощи на этом, но я просто выяснил способ совершить эту ошибку, исчезают. В моем combobox я пересмотрел собственность ItemTemplate как это:


    
        
    

YourBinding - стоимость, которую вы использовали бы в качестве "DisplayMemberPath" для ComboBox

0
добавлено
Я давно закончил тот проект и don' t с готовностью имеют доступ к источнику. Я думаю , у меня был обычай ItemTemplate, но я не уверен. К сожалению, это похоже, чтобы быть месяцами (если когда-либо), прежде чем я возвращусь на том проекте снова и смогу проверить.
добавлено автор CodeWarrior, источник
Верстка сайтов HTML/CSS/JS/PHP
Верстка сайтов HTML/CSS/JS/PHP
3 439 участник(ов)

Правила группы: напишите !rules в чате. Группа Вк: vk.com/web_structure Freelancer: @web_fl Веб Дизайн: @dev_design Маркетолог: @topmarkening Автор: @M_Boroda

CSS — русскоговорящее сообщество
CSS — русскоговорящее сообщество
1 502 участник(ов)

Сообщество любителей CSS Возникли проблемы с CSS? – пиши сюда, обсудим и предложим самое лучшее решение Работа: @css_ru_jobs Правила: https://teletype.in/@css_ru/r1EWtQ2w7 Приходите в наши чаты @javascript_ru и @frontend_ru Флуд: @css_flood

Чат — Типичный Верстальщик
Чат — Типичный Верстальщик
1 080 участник(ов)

Основной канал: @tpverstak Обратная связь: @annblok Все ссылки на соц.сети проекта: http://taplink.cc/tpverstak ПРАВИЛА ЧАТА — https://teletype.in/@annblok/BygPgC3E7

Веб-Технологи: UI/UX, Вёрстка, Фронтенд
Веб-Технологи: UI/UX, Вёрстка, Фронтенд
167 участник(ов)

Всё про веб-дизайн и вёрстку. А также: HTML, CSS, флекс и бутстрапы, шаблонизаторы, препроцессоры, методологии, аглифаеры, улучшаторы и обфускаторы. Обсуждаем темы юзабилити, устраиваем А/В тесты лендингов, и проводим аудит.

DTP :: @DTPublish
DTP :: @DTPublish
147 участник(ов)

Обсуждаемые темы: полиграфия, препресс, верстка, дизайн, иллюстрации, скрипты, плагины. Канал - @DTPublishing

css_jobs
css_jobs
26 участник(ов)

Чат для вопросов по css и html: @css_ru Флуд: @css_flood Канал с вакансиями и резюме: @css_jobs_feed

css_флуд
css_флуд
10 участник(ов)