如何将新输入的项目保存到组合框项目源中?

时间:2015-08-04 14:59:37

标签: c# wpf combobox

我正在尝试将新项目添加到Combobox中。例如:如果ComboBox项目源具有“一个”,“两个”和“三个”。我可以通过将IsEditable属性设置为true来键入。新项目“四”需要保存在组合框中。请分享一下这个。

<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);
        }
    }

1 个答案:

答案 0 :(得分:1)

<强> PreviewKeyDown

您的ComboBox未绑定到EventHandler comboBox_PreviewKeyDown

你真的想使用PreviewKeyDown吗? PreviewKeyDown comboBox.Text在排除按下的键之前仍然有文本。改为使用KeyDown。

每个Keypress都会添加新的和旧的字母。 打字&#34; Hello World&#34;将以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}"

我更喜欢在我的基础ViewModel中设置OrderInfoRepositiory,然后你不需要StaticResource并只绑定到属性。

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