【问题标题】:SelectionChanged isn't firing when user changes combobox in WPF当用户在 WPF 中更改组合框时,SelectionChanged 不会触发
【发布时间】:2015-01-31 02:33:09
【问题描述】:

所以我的selectionChanged 事件不会在用户更改它时触发,但如果我在代码中更改它就会触发。

我正在使用selectionchanged 从组合框中获取选择以填充另一个组合框。

<!--1st list -->
<ComboBox ItemsSource="{Binding djurKatList}" SelectedItem="{Binding SelectedDjurKat}" SelectionChanged="listKat_SelectionChanged" x:Name="listKat" HorizontalAlignment="Left" Margin="98,118,0,0" VerticalAlignment="Top" Width="120"/>

<!--2nd list that's filled after something is selected in 1st list-->
<ComboBox ItemsSource="{Binding djurArtList}" SelectedItem="{Binding SelectedDjurArt}" x:Name="listDjur" HorizontalAlignment="Left" Margin="98,154,0,0" VerticalAlignment="Top" Width="120"/>

在这后面的代码中填充了第二个组合框并且当我更改第一个组合框时没有执行:

private void listKat_SelectionChanged(object sender, SelectionChangedEventArgs e)
{            
    fyllDjurArtLista(hanterare, typeof(Daggdjur));
}

当我更改代码中的选择时,selectionChanged 触发,下面我更改我选择的comboboxitem,事件被触发并填充第二个组合框。

var listItem = new ComboBoxItem { Content = "Välj kategori" };
SelectedDjurKat = listItem;

【问题讨论】:

标签: c# wpf events


【解决方案1】:

这是一个简单的例子,它可以工作。

/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window {
    public MainWindow() {
        InitializeComponent();

        VM v = new VM();
        v.djurKatList = new List<string>();
        v.djurKatList.Add("1");
        v.djurKatList.Add("2");
        v.djurKatList.Add("3");
        v.djurKatList.Add("4");
        v.djurKatList.Add("5");

        DataContext = v;
    }

    private void listKat_SelectionChanged(object sender, SelectionChangedEventArgs e) {
       // fyllDjurArtLista(hanterare, typeof(Daggdjur));
    }
}

public class VM {
    public List<string> djurKatList { get; set; }
    public string SelectedDjurKat { get; set; }
}

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
<Grid>
    <StackPanel>
        <!--1st list -->
        <ComboBox ItemsSource="{Binding djurKatList}" SelectedItem="{Binding SelectedDjurKat}" SelectionChanged="listKat_SelectionChanged"
                  x:Name="listKat" HorizontalAlignment="Left" Margin="98,118,0,0" VerticalAlignment="Top" Width="120"/>

        <!--2nd list that's filled after something is selected in 1st list-->
        <ComboBox ItemsSource="{Binding djurArtList}" SelectedItem="{Binding SelectedDjurArt}" x:Name="listDjur" HorizontalAlignment="Left"
                  Margin="98,154,0,0" VerticalAlignment="Top" Width="120"/>
    </StackPanel>
</Grid>

SelectionChanged 被触发。但是,如果问题是另一个组合框未填充,那么您需要按照建议使用INotifyPropertyChanged。您需要为属性 djurArtList 调用 PropertyChanged。

【讨论】:

    猜你喜欢
    • 2016-06-06
    • 1970-01-01
    • 1970-01-01
    • 2012-11-27
    • 1970-01-01
    • 1970-01-01
    • 2018-05-03
    • 1970-01-01
    • 2011-06-28
    相关资源
    最近更新 更多