如何将新输入的项目保存到组合框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);
}
}
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"/>