У меня есть пользовательский элемент управления, содержащий расширитель. Содержимое расширителя - это ListBox, привязанный к объекту, и DataTemplate отображает его правильно. Проблема заключается в следующем: пользователь может выбрать элемент Listbox, а обработчик SelectionChanged изменил DataContext ListBox на выбранный объект.
Нравится:
<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
события?