我的组合盒出了点问题。我有两个窗口,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,我可以看到传递的值是所需的值,但是当新窗口打开时,联系人字段为空。
现在奇怪的部分是,如果我取消对消息框的注释,在窗口弹出之前会出现一条消息,然后在接受之后,新窗口将填充该字段。
这可能是UI不能正确填充的问题,但是我尝试了几次更改,但都不起作用。
有没有关于如何继续的想法
XAML:
<ComboBox x:Name="cb_ContactPerson" HorizontalAlignment="Left" Margin="105,41,0,0" VerticalAlignment="Top" Width="279" ItemsSource="{Binding}" />发布于 2019-03-21 07:13:11
问题的可能原因可能是在事件处理程序中设置了DataContext,ItemsSource绑定重新计算可能会在SelectionChanged事件完成后稍微发生,从而导致在填充ItemsSource之前设置Text属性。
当您添加一个MessageBox时,这将停止执行,直到您释放该MessageBox,让ItemsSource绑定有时间重新计算。
要查看实际效果,请在影响文本属性之前用断点检查ItemsSource的值。另外,考虑影响SelectedItem而不是Text属性。
编辑:@Joey在他的评论中是对的,编辑了我的答案以突出可能的原因。当我说事件是在不同的线程上运行时,我错了。
https://stackoverflow.com/questions/55270858
复制相似问题