WPF Combo Box странное поведение - PullRequest
0 голосов
/ 21 марта 2019

У меня проблема с моим списком. У меня есть два окна, LPO_Process и New_LPO. LPO_Process заполняет данные для New_LPO перед их отображением. У меня есть два поля со списком в New_LPO, один для поставщика, а другой для контактного лица. При изменении элемента списка поставщиков он обновляется для контактного лица.

private void cb_Suppliers_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    cb_ContactPerson.DataContext = Database.LPO.Suppliers.SuppliersQuery.getContactPersonIdName(Convert.ToInt32(cb_Suppliers.SelectedValue));
    cb_ContactPerson.DisplayMemberPath = "Name";
    cb_ContactPerson.SelectedValuePath = "CPID";       
}

Теперь я загружаю данные из LPO_Process, используя следующее:

     viewLPO.cb_Suppliers.SelectedValue = Convert.ToInt32((dt_LPO.Rows[0]["SID"].ToString()));
//MessageBox.Show("TEST");
viewLPO.cb_ContactPerson.Text = (dt_LPO.Rows[0]["ContactPersonID"].ToString());
viewLPO.Show();

Используя debug, я вижу, что переданное значение является обязательным, однако при открытии нового окна поле контактного лица становится пустым.

Теперь странная часть: если я раскомментирую окно сообщения, перед тем, как окно откроется, появится сообщение, а после подтверждения в новом окне будет заполнено поле.

Возможно, проблема в том, что пользовательский интерфейс не заполняется должным образом, однако я попробовал несколько изменений, но ничего не помогло.

Любая идея о том, как поступить

XAML:

<ComboBox x:Name="cb_ContactPerson" HorizontalAlignment="Left" Margin="105,41,0,0" VerticalAlignment="Top" Width="279" ItemsSource="{Binding}" />

1 Ответ

1 голос
/ 21 марта 2019

Возможной причиной вашей проблемы может быть ваш DataContext, устанавливаемый в обработчике событий, переоценка ItemsSource Binding может произойти немного после того, как событие SelectionChanged выполнено, в результате чего свойство Text будет установлено до заполнения ItemsSource.

Когда вы добавляете MessageBox, это останавливает выполнение до тех пор, пока вы не закроете MessageBox, предоставив время привязке ItemsSource для повторной оценки.

Чтобы увидеть это в действии, проверьте с помощью точки останова значениеItemsSource до воздействия на свойство Text.Также рассмотрите возможность влияния на SelectedItem вместо свойства Text.

РЕДАКТИРОВАТЬ: @Джой прав в своем комментарии, отредактировал мой ответ, чтобы выделить возможную причину.Я был неправ, когда сказал, что событие запускается в другом потоке.

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