2015-01-31 3 views
0

Так что мое событие selectionChanged не срабатывает, когда пользователь меняет его, но срабатывает, если я его изменяю в коде.SelectionChanged не срабатывает, когда пользователь меняет combobox в WPF

Я использую 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"/>

В коде позади этого заполняет 2-ю выпадающий и не выполняется при изменении 1-й выпадающий:

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

Когда я изменить выбор в коде, selectionChanged пожаров , здесь ниже я меняю свой выбранный comboboxitem, событие увольняется и заполняется 2-е поле со списком.

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

Вы используете INotifyPropertyChanged? –

+0

Возможный дубликат [может ли событие SelectionChanged в WPF обрабатываться только для взаимодействия с пользователем?] (Http://stackoverflow.com/questions/14301271/could-the-selectionchanged-event-in-wpf-be-handled-only- для-пользователя-взаимодействия) – Arash

ответ

0

Вот простой пример, и он работает.

/// <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> 

The SelectionChanged обжигают. Но если проблема в том, что другое поле со списком не заполнено, вам необходимо использовать INotifyPropertyChanged, как было предложено. Вам нужно вызвать PropertyChanged для свойства djurArtList.

+0

да я не использовал INotifypropertychanged, thx – user3621898

Смежные вопросы