WPF ComboBox SelectedItem установлен в нуль на переключателе TabControl - PullRequest
17 голосов
/ 10 августа 2010

В моем приложении WPF есть простая проблема, из-за которой я бью себя по столу. У меня есть TabControl, где каждый TabItem является представлением, сгенерированным для ViewModel с использованием DataTemplate, подобным этому:

<DataTemplate DataType="{x:Type vm:FooViewModel}">
    <vw:FooView/>
</DataTemplate>

FooView содержит ComboBox:

<ComboBox ItemsSource="{Binding Path=BarList}" DisplayMemberPath="Name" SelectedItem="{Binding Path=SelectedBar}"/>

и FooViewModel содержит простое свойство: public Bar SelectedBar { get; set; }. Моя проблема в том, что, когда я устанавливаю значение для своего ComboBox, переключаюсь на другую вкладку, а затем возвращаюсь обратно, ComboBox снова пуст. Если я установлю точку останова для установщика для своего свойства, я вижу, что свойство назначается null при переключении на другую вкладку.

Из того, что я понимаю, когда вкладка переключается, она удаляется из VisualTree - но почему она устанавливает для свойства моего ViewModel значение null? Из-за этого мне очень трудно поддерживать постоянное состояние, и проверка value != null не кажется правильным решением. Кто-нибудь может пролить что-то подобное в этой ситуации?

Редактировать: в стеке вызовов в точке останова установщика отображается только [Внешний код] - здесь никаких подсказок.

Ответы [ 11 ]

0 голосов
/ 10 августа 2010

У меня когда-то была похожая проблема. Похоже, что выпадающий список теряет выделенный элемент в событии VisibilityChanged. Обходной путь - очистить привязку, прежде чем это произойдет, и сбросить ее при возвращении. Вы также можете попробовать установить Binding to Mode = TwoWay

Надеюсь, что это поможет

Jan

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...