Проблема с SelectedItem редактируемого ComboBox WPF с DataTemplate

У меня возникла следующая проблема с WPF ComboBox:

XAML:

<Window.Resources>
  <ResourceDictionary>
    <DataTemplate DataType="{x:Type this:Data}">

      <ComboBox IsTextSearchEnabled="False" IsEditable="True" 
                Text="{Binding Value}" ItemsSource="{Binding Menu}"/>

    </DataTemplate>
  </ResourceDictionary>
</Window.Resources>

<StackPanel>
  <ContentControl Content="{Binding}"/>
  <Button Click="ChangeData_Click">Change Data</Button>
</StackPanel>

Код позади:

public Window1()
{
    InitializeComponent();
    DataContext = new Data();
}

void ChangeData_Click(object sender, RoutedEventArgs e)
{
    DataContext = new Data();
}

Я открываю окно и получаю ComboBox, привязанный к моей модели данных, я выбираю какой-то элемент (например, 1), все отлично.

Я меняю контекст данных на новую модель данных - выбранный элемент (к моему удивлению) 1... Где я не ожидаю никакого выбранного элемента...

Я подозреваю, что это как-то связано с полем со списком, в котором поиск отключен и доступен для редактирования, но я не уверен, в чем была проблема.

Я нашел обходной путь: вызвать UpdateLayout() на ContentControl, ограниченном DataContext, но это некрасиво.

Это ошибка WPF? Это все моя вина?

Пожалуйста помоги


person Amittai Shapira    schedule 07.09.2009    source источник


Ответы (1)


Я отправил тот же вопрос на форум MSDN WPF, и это похоже на ошибку Microsoft. Я нашел обходной путь, уродливый, но он работает. Вот измененный код:

    public Window1()
    {
        InitializeComponent();
        DataContext = new Data();
        DataContextChanged += delegate { contentControl.UpdateLayout(); };
    }

    void ChangeData_Click(object sender, RoutedEventArgs e)
    {
        DataContext = null;
        DataContext = new Data();
    }

Обратите внимание, что для решения этой проблемы необходимо установить для DataContext значение null и вызвать UpdateLayout() для DataContextChanged.

person Amittai Shapira    schedule 10.09.2009