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

本文关键字:保存 项目 组合 itemssource 新输入 输入 | 更新日期: 2023-09-27 18:06:13

我试图在组合框中添加新项目。例如:如果组合框中的项目源有"一","二"answers"三"。我可以通过将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);
        }
    }

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

PreviewKeyDown

您的ComboBox未绑定到EventHandler comboBox_PreviewKeyDown .

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

每个按键将添加新的和旧的键入字母。输入"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}"

我更喜欢在我的底层ViewModel中设置OrderInfoRepositiory,然后您不需要StaticResource,只需绑定到属性。

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