У меня есть пользовательский элемент управления, содержащий расширитель. Содержание эксмандера - это ListBox, связанный с объектом, и DataTemplate отображает его правильно. Проблема заключается в следующем: пользователь может выбрать элемент Listbox, а обработчик SelectionChanged изменил DataContext ListBox на выбранный объект.WPF ListBox DataContextChanged триггеры SelectionChanged
Как это:
<ListBox
Name="RelativesLB" ItemsSource="{Binding Relatives}",
ItemsTemplate ="{...}",
Selectionchanged="Relatives_OnSelectionChanged" />
И:
Relatives_OnSelectionChanged(object sender, ...EventArgs e)
{
var who = (sender as ListBox).SelectedItem as Person;
if (who == null)
return;
People.DataContext = who;
Вот проблема:
- В
SelectionChanged
срабатывает событие. - Изменен
DataContext
, иListBox
повторно заполняется. SelectionChanged
Событие пожаров сSelectedItem = null
. Здесь мой код не меняетDataContext
; он просто возвращается.SelectionChanged
Событие снова начинается сSelectedItem = <whatever is first>
. Здесь мой код снова меняетDataContext
на этот элемент Мне не нужен этот бит. На самом деле, я хочу, чтобы остановить после 2.Datacontext
изменяется на<whatever is first>
...
и так далее, пока мы не получим пустойPerson.Relatives
, то мы останавливаемся.
Что я хочу, это остановка после первого изменения DataContext
. Вы выбираете person
из коллекции Relatives
и получаете представление для этого человека.
Как я могу остановить последующие обстрелы событий SelectionChanged
?
Спасибо, я попробую, но я не вижу его предотвращения новых событий стрельбы, когда выбор изменяется. – PScr
Грязи, я попробовал, и это не имело значения. Я думаю, это по двум причинам. – PScr
... 2 причины. Во-первых, ничего не интересного в событии 'SelectionChanged'. Я не понимаю, почему я не должен останавливать это. Во-вторых, есть «событие», когда «DataContext» изменяется, и «ListBox» повторно заселен. Я получаю «событие», когда это происходит, и ничего не выбрано ('SelectedItem == null'). Затем первый элемент выбирается, если он есть, и снова срабатывает «SelectionChanged» (и с моим кодом «DataContext» изменяется на этот первый элемент и продолжается. До тех пор, пока мы не получим пустой «ListBox». – PScr