所以,我将我的一些组合框转换为可编辑的组合框,因为客户想要自由输入新条目。组合框由具有实体框架的查找表填充,并且需要将新条目添加到查找表中。当焦点离开组合框并将新条目添加到表格时,我已经扩展了组合框以生成一个事件:
private void CollectionComboBox_NewItem(object sender, NewItemEventArgs e)
{
var newItem = new Collection() { Name = e.Text };
_context.Collections.Add(newItem);
e.Item = newItem;
}
这一切似乎运行良好,但是为了使其工作,我不得不将绑定切换到使用SelectedValue到SelectedItem的实体,因为控件上的验证器触发,因为还没有为新记录分配ID。 / p>
保存记录时出现的问题是已存在的项目会将另一条记录添加到数据库中。我知道它与切换到SelectedItem有关,而不是我的自定义组合框,因为它与普通组合框表现出相同的行为。
我的Combobox XAML:
<dock:EditableComboBox Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="3" x:Name="CollectionComboBox" Margin="12,5,18,0"
NewItem="CollectionComboBox_NewItem" MaxLength="100"
HorizontalAlignment="Stretch"
ItemsSource="{Binding Source={StaticResource CollectionViewSource}}" DisplayMemberPath="Name"
SelectedValuePath="CollectionID" IsSynchronizedWithCurrentItem="False"
x:FieldModifier="private"
SelectedItem="{Binding Collection, UpdateSourceTrigger=PropertyChanged}">
<dock:EditableComboBox.Text>
<Binding RelativeSource="{RelativeSource Self}" Path="Text" UpdateSourceTrigger="LostFocus">
<Binding.ValidationRules>
<gui:RequiredComboValidator ValidatesOnTargetUpdated="True" />
</Binding.ValidationRules>
</Binding>
</dock:EditableComboBox.Text>
</dock:EditableComboBox>
CollectionViewSource:
<CollectionViewSource x:Key="CollectionViewSource"
d:DesignSource="{d:DesignInstance storeAndForward:Collection, CreateList=True}">
<CollectionViewSource.SortDescriptions>
<windowsBase:SortDescription Direction="Ascending" PropertyName="Name" />
</CollectionViewSource.SortDescriptions>
</CollectionViewSource>