我有一个 AutoCompleteBox,我使用 ProductCode 进行搜索。自动完成框的项目源是一个列表List<Product>
,其中 Product 具有以下属性:ProductCode、ProductID、ProductBrandCode。
一切正常,除非当所选产品与列表中的另一个产品具有相同的 ProductCode 时我尝试检索 SelectedItem 属性。
例如,假设我有 6 种产品:
ProductID | ProductCode | ProductBrandCode
1 t1 abc
2 t34 zyx
3 test123 abc
4 test123 zxc
5 test123 asd
6 t23 asd
如果我选择第 5 个产品(ID 为 5),SelectedItem 将返回 ID = 3 的产品。如果我选择 id=4 的产品,也会发生同样的情况,我总是得到与 ProductCode 匹配的第一个产品。我假设这是由于在这种情况下我的 ValueMemberPath 设置为 ProductCode 女巫不是唯一的,并且 autoCompleteBox 以某种方式获取了第一个匹配的 ProductCode。如果我选择列表中没有重复 ProductCode 的产品,它工作得非常好。
这是它在 xaml 中的外观:
<my:AutoCompleteBox x:Name="autoTxtBoxProductCode"
verticalAlignment="Top" HorizontalAlignment="Left"
Height="25" Margin="116,10,0,0"
Width="144" Background="#FFEDF4AB"
TabIndex="2001" IsTabStop="True"
Populating="AutoBoxPopulateProductCode"
ValueMemberPath="ProductCode"
Style="{StaticResource autoTextBoxInError}"
Validation.Error="Validation_Error"
PreviewKeyUp="autoTxtBoxProductCode_PreviewKeyUp"
IsTextCompletionEnabled="False" MinimumPrefixLength="2"
Text="{Binding Path=ProductCode,
UpdateSourceTrigger=PropertyChanged,
ValidatesOnDataErrors=true,
NotifyOnValidationError=true,
Mode=TwoWay}"
SelectedItem="{Binding Path=ProductID}">
<my:AutoCompleteBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding ProductBrandCode}"
FontWeight="Bold"
Foreground="Black"
Width="65" FontSize="14"/>
<TextBlock Text="{Binding ProductCode}"
Foreground="Black"/>
</StackPanel>
</DataTemplate>
</my:AutoCompleteBox.ItemTemplate>
</my:AutoCompleteBox>
在我的代码中,我像这样检索所选项目:
private void autoTxtBoxProductCode_PreviewKeyUp(object sender, KeyEventArgs e)
{
Product prd = (Product)(autoTxtBoxProductCode.SelectedItem);
MessageBox.Show(prd.ProductID.ToString());
}
有没有办法解决这个问题?