2017-02-13 10 views
0

Мне нужно добавить два элемента управления ListView в пункты ComboBox, но он отображает элементы listview вместо имени listview.Как связать элементы управления ListView с ComboBox ItemSource

listView = new ListView(); 
ObservableCollection<String> list = new ObservableCollection<string>(); 
list.Add("1"); 
list.Add("2");  
listView.ItemsSource = list; 

listView2 = new ListView(); 
ObservableCollection<String> list12 = new ObservableCollection<string>(); 
list12.Add("11"); 
list12.Add("12"); 
listView2.ItemsSource = list12; 

combobox.Items.Add(listView); 
combobox.Items.Add(listView12); 

private void combobox_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    var combobox = sender as ComboBox; 
    if(combobox.SelectedIndex == 0) 
     combobox.ItemsSource = listView; 
    else 
     combobox.ItemsSource = listView12; 
} 

Вот мой Xaml код

<ComboBox Grid.Row="4" x:Name="combobox" SelectionChanged="combobox_SelectionChanged" /> 
+1

Вы пытались создать словарь > где вы можете связать ключ с ComboBox? – AbsoluteSith

+0

Я пробовал, он не работает. Мне нужен точный ответ – shalusri

ответ

0

Ваша ошибка в следующих строках:

if(combobox.SelectedIndex == 0) 
    combobox.ItemsSource = listView; 
else 
    combobox.ItemsSource = listView12; 

Вы настраиваете содержание списков как ItemsSource для ComboBox. Это означает, что опциями в combobox будут элементы от listView или listView12.

Вы не должны иметь ничего общего, так как вы уже заселена свой выпадающий при запуске с помощью следующих строк:

combobox.Items.Add(listView); 
combobox.Items.Add(listView12); 

, когда изменение выбора выпадающий, вы, вероятно, просто хочу, чтобы получить выбранный элемент и обновления некоторые другие части вашего приложения с ним.

0
listView = new ListView(); 
ObservableCollection<String> list = new ObservableCollection<string>(); 
list.Add("1"); 
list.Add("2");  
listView.ItemsSource = list; 

listView2 = new ListView(); 
ObservableCollection<String> list12 = new ObservableCollection<string>(); 
list12.Add("11"); 
list12.Add("12"); 
listView2.ItemsSource = list12; 

Dictionary<string,ObservableCollection<String>> dictionary = new Dictionary<string,ObservableCollection<String>(); 
dictionary.Add(nameof(list), list); 
dictionary.Add(nameof(list12),list12); 

combobox.ItemsSource = dictionary; 
//And make sure you add DisplayMemberPath="Key" in the combobox. 

private void combobox_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    var combobox = sender as ComboBox; 
    if(combobox.SelectedIndex == 0) 
     combobox.ItemsSource = dictionary[nameof(list)]; 
    else 
     combobox.ItemsSource = dictionary[nameof(list12)]; 

    //Clear the DisplayMemberPath since you're binding the values now. 
    combobox.DisplayMemberPath = null; 
} 

Я думаю, это то, чего вы пытаетесь достичь, хотя это не имеет большого смысла.