你能帮我找出其中的错误吗:事件触发之前,甚至窗口窗体加载.我开始看到消息框,然后我点击确定,之后它加载主屏幕.之后,一切工作完美,我想知道在加载窗口之前是什么触发了ComboBox SelectionChanged事件。(SegmentCode)只是创建一个数据集,并把值放在ComboBox中。请参考此链接以获取完整的代码。
Not able to make cascading comboboxes work
任何帮助都将不胜感激。谢谢。
<ComboBox Height="23" HorizontalAlignment="Left" Margin="35,26,0,0" Name="comboBox1" VerticalAlignment="Top" Width="205" ItemsSource="{Binding Source={StaticResource tblSegmentViewSource}}" DisplayMemberPath="Segment Name" SelectedValuePath="Segment Code" SelectionChanged="comboBox1_SelectionChanged"/>
<ComboBox Margin="304,26,395,93" Name="comboBox2" />
private void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
MessageBox.Show(comboBox1.SelectedValue.ToString());
SegmentCode = Convert.ToInt32(comboBox1.SelectedValue.ToString());
FillComboBoxFamilyData(SegmentCode);
}
字符串
5条答案
按热度按时间xjreopfe1#
在数据加载(通过绑定附加)的时候,SelectionChanged将被触发。因此,如果您的应用已经准备好并且所有数据都已加载并附加,则必须检查您的事件处理程序。如果没有,则返回事件处理程序而不执行任何操作。此行为是设计好的。
字符串
你可以使用
IsLoaded
-属性来检测绑定是否已经被评估过。IsLoaded
不会为true,除非数据绑定引擎已经评估过你的xaml绑定。型
yuvru6vn2#
您可以使用组合框的IsLoaded属性来测试它是否已加载。这是我能找到的最干净和最简单的解决方案:
字符串
xt0899hw3#
我知道这是一个老问题,但我遇到了它两次试图在我的项目中解决这个问题,并有相同的结果作为OP.我的列表是填充后IsLoaded是真的.所以,我想我会张贴我为别人想通了什么.只需使用DropDowOpened事件设置一个布尔值为真.这样,SelectionChanged事件不会触发,直到用户实际上点击了按钮.
字符串
0kjbasz64#
您可以添加以下代码,以便在下拉列表展开时使select-change生效
字符串
omjgkv6w5#
我也有同样的问题,我发现使用xaml设置combox的starting-selection-index会在程序加载时触发selectionchanged事件,这会导致错误。
要解决这个问题,您可以将selection-index设置为-1(默认值)或在程序加载后使用代码更改组合框的当前选择索引。