当用户更改 WPF 中的组合框时,SelectionChanged 未触发
SelectionChanged isn't firing when user changes combobox in WPF
所以我的 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;
这是一个简单的例子,它可以工作。
/// <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。
所以我的 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;
这是一个简单的例子,它可以工作。
/// <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。