首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF组合框奇怪的行为

WPF组合框奇怪的行为
EN

Stack Overflow用户
提问于 2019-03-21 06:06:05
回答 1查看 82关注 0票数 0

我的组合盒出了点问题。我有两个窗口,LPO_Process和New_LPO。在显示数据之前,LPO_Process将填充New_LPO的数据。我在New_LPO中有两个组合框,一个用于供应商,另一个用于联系人。每当供应商组合框项目发生更改时,它都会更新联系人的组合框项目。

代码语言:javascript
复制
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加载数据:

代码语言:javascript
复制
     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:

代码语言:javascript
复制
<ComboBox x:Name="cb_ContactPerson" HorizontalAlignment="Left" Margin="105,41,0,0" VerticalAlignment="Top" Width="279" ItemsSource="{Binding}" />
EN

回答 1

Stack Overflow用户

发布于 2019-03-21 07:13:11

问题的可能原因可能是在事件处理程序中设置了DataContext,ItemsSource绑定重新计算可能会在SelectionChanged事件完成后稍微发生,从而导致在填充ItemsSource之前设置Text属性。

当您添加一个MessageBox时,这将停止执行,直到您释放该MessageBox,让ItemsSource绑定有时间重新计算。

要查看实际效果,请在影响文本属性之前用断点检查ItemsSource的值。另外,考虑影响SelectedItem而不是Text属性。

编辑:@Joey在他的评论中是对的,编辑了我的答案以突出可能的原因。当我说事件是在不同的线程上运行时,我错了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55270858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档