2015-08-04 2 views
1

Я пытаюсь добавить новый элемент в Combobox. Для ex: если ComboBox itemssource имеет «один», «два» и «три». Я могу напечатать, установив для свойства IsEditable значение true. Новый элемент «Четыре», который необходимо сохранить в combobox. Пожалуйста, поделитесь этим.Как сохранить вновь введенный элемент в элемент списка combobox?

<Window.Resources> 
    <local:OrderInfoRepositiory x:Key="ordercollection"/> 
</Window.Resources> 

<ComboBox x:Name="combo" IsEditable="True" ItemsSource="{Binding ComboItems,Source={StaticResource ordercollection}}" Height="50" Width="150"/>

код позади:

void combo_PreviewKeyDown(object sender, KeyEventArgs e) 
    { 
     var combo=(sender as ComboBox); 
     (combo.DataContext as OrderInfoRepositiory).ComboItems.Add(combo.Text); 
    } 


private ObservableCollection<string> comboItems = new ObservableCollection<string>(); 
    public ObservableCollection<string> ComboItems 
    { 
     get { return comboItems; } 
     set 
     { 
      comboItems = value; 
      RaisePropertyChanged("ComboItems"); 
     } 
    } 

public OrderInfoRepositiory() 
    { 
     orderCollection = new ObservableCollection<OrderInfo>(); 
     OrderInfoCollection = GenerateOrders(); 
     foreach (OrderInfo o in orderCollection) 
     { 
      comboItems.Add(o.Country); 
     } 
    } 
+0

Он работает, когда вы перезапускаете приложение? есть ли новая запись? – JoshuadV

+0

А где эти комбинированные элементы? – JoshuadV

+0

ComboItems, определенные в ViewModel – User

ответ

0

PreviewKeyDown

Ваш ComboBox не связан с EventHandler .

Вы действительно хотите использовать PreviewKeyDown? С PreviewKeyDowncomboBox.Text все еще имеет текст перед исключением нажатой клавиши. Вместо этого используйте KeyDown.

Каждый Keypress добавит новые и старые напечатанные буквы. Ввод «Hello World» закончится в H, He, Hel, Hell и т. Д. Проверьте на Key.Return, чтобы добавить элемент по завершении или использовать кнопку. Затем вы можете использовать событие PreviewKeyDown.

void combo_PreviewKeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Key == Key.Return) 
    { 
     var combo = (sender as ComboBox); 
     (combo.DataContext as OrderInfoRepository).ComboItems.Add(combo.Text); 
    } 
} 

DataContext

Вы бросаете DataContext к OrderInfoRepositiory, но нет никакого присваивания в коде.

добавить на ComboBox:

DataContext="{Binding Source={StaticResource ordercollection}}" 

Тогда вы можете изменить ваш ItemsSource:

ItemsSource="{Binding ComboItems}" 

Я предпочитаю настройки OrderInfoRepositiory в моей основной ViewModel, то вам не нужно StaticResource и просто связываться с недвижимость.

<ComboBox x:Name="combo" IsEditable="True" DataContext="{Binding Source={StaticResource ordercollection}}" ItemsSource="{Binding ComboItems}" Height="50" Width="150" KeyDown="combo_PreviewKeyDown"/> 
Смежные вопросы