wpf ComboBox selectionchanged事件触发器,甚至无需更改ComboBox中的选择

cnh2zyt3  于 2023-11-20  发布在  其他
关注(0)|答案(5)|浏览(388)

你能帮我找出其中的错误吗:事件触发之前,甚至窗口窗体加载.我开始看到消息框,然后我点击确定,之后它加载主屏幕.之后,一切工作完美,我想知道在加载窗口之前是什么触发了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);

    }

字符串

xjreopfe

xjreopfe1#

在数据加载(通过绑定附加)的时候,SelectionChanged将被触发。因此,如果您的应用已经准备好并且所有数据都已加载并附加,则必须检查您的事件处理程序。如果没有,则返回事件处理程序而不执行任何操作。此行为是设计好的。

ItemsSource="{Binding Source={StaticResource tblSegmentViewSource}}"

字符串
你可以使用IsLoaded-属性来检测绑定是否已经被评估过。IsLoaded不会为true,除非数据绑定引擎已经评估过你的xaml绑定。

private void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)     { 
   if(!IsLoaded){
      return;
   }
   .... your code here

yuvru6vn

yuvru6vn2#

您可以使用组合框的IsLoaded属性来测试它是否已加载。这是我能找到的最干净和最简单的解决方案:

var comboBox = (ComboBox)sender;
if (!comboBox.IsLoaded)
{
    // This is when the combo box is not loaded yet and the event is called.
    return;
}

字符串

xt0899hw

xt0899hw3#

我知道这是一个老问题,但我遇到了它两次试图在我的项目中解决这个问题,并有相同的结果作为OP.我的列表是填充后IsLoaded是真的.所以,我想我会张贴我为别人想通了什么.只需使用DropDowOpened事件设置一个布尔值为真.这样,SelectionChanged事件不会触发,直到用户实际上点击了按钮.

private bool UserSeriesChange;
private void comboBox1_DropDownOpened(object sender, EventArgs e)
{
        UserSeriesChange = true;    
}

private void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{ 
   if(!UserSeriesChange){
      return;
   }
   .... your code here

字符串

0kjbasz6

0kjbasz64#

您可以添加以下代码,以便在下拉列表展开时使select-change生效

if (sender is ComboBox comboBox)
        {
            if (comboBox.IsDropDownOpen)
            {
                var comboBoxSelectedItem = comboBox.SelectedItem;
            }
        }

字符串

omjgkv6w

omjgkv6w5#

我也有同样的问题,我发现使用xaml设置combox的starting-selection-index会在程序加载时触发selectionchanged事件,这会导致错误。
要解决这个问题,您可以将selection-index设置为-1(默认值)在程序加载后使用代码更改组合框的当前选择索引。

相关问题