我正在尝试将新项目添加到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);
}
}
答案 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"/>