ComboBox SelectedItem изменяется, когда родительский TabItem теряет фокус - PullRequest
0 голосов
/ 14 октября 2010

У меня есть ComboBox, размещенный в TabItem. Когда я выбираю элемент в ComboBox, заполняется соответствующий ListView. Когда я ухожу от TabItem и затем возвращаюсь, SelectedItem в ComboBox пуст, но ListView остается заполненным правильно. Событие SelectedItemChanged не было инициировано.

Почему выбранный элемент не отображается в ComboBox, когда я возвращаюсь для его просмотра?

Какой-то код: В представлении ---

             <ComboBox x:Name="customersComboBox"
                              ItemsSource="{Binding Path=Customers }"
                              SelectedItem="{Binding Path=SelectedCustomer, UpdateSourceTrigger=PropertyChanged}"
                              DisplayMemberPath="Code"
                              IsEditable="False">

В ViewModel -

    public ICustomerInfo SelectedCustomer
    {
        get { return (ICustomerInfo)GetValue(SelectedCustomerProperty); }
        set { SetValue(SelectedCustomerProperty, value); }
    }

    // Using a DependencyProperty as the backing store for SelectedCustomer.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty SelectedCustomerProperty =
        DependencyProperty.Register("SelectedCustomer", typeof(ICustomerInfo), typeof(OrdersViewModel), new UIPropertyMetadata(null, SelectedCustomerChanged));

    private static void SelectedCustomerChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        if (d==null)
        {
            return;
        }
        OrdersViewModel viewModel = d as OrdersViewModel;
        if (e.NewValue == null)
        {
            return;
        }
        ICustomerInfo selectedCustomer = e.NewValue as ICustomerInfo;
        viewModel.SelectedCustomerChanged(selectedCustomer);
    }

    private void SelectedCustomerChanged(ICustomerInfo selectedCustomer)
    {
         if (selectedCustomer != null)
        {
            if (!GetOrders())
            {
                return;
            }
        }
    }

Ответы [ 2 ]

1 голос
/ 15 октября 2010

Я понял, что происходит.

Когда вкладка теряет фокус, событие SelectedItemChanged возникает! Я думаю, что понимаю механизм, который вызывает событие, но я не понимаю, почему это должно произойти - очевидно, это «по замыслу».

То, что происходило, было то, что e.NewValue было нулевым, и мой код не изменился на новые значения, но SelectedItem БЫЛ установлен в нуль.

Ошибка программирования, но странное поведение TabItem (и его дочерних элементов управления) привело меня в замешательство!

0 голосов
/ 14 октября 2010
set EnabledViewState=true

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

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