我有一個AutoCompleteBox,我使用ProductCode進行搜索。自動完成框的項目源是一個列表List<Product>
,其中產品具有以下屬性:ProductCode,ProductID,ProductBrandCode。c#WPF AutoCompleteBox - 列表中返回第一個匹配項的simillar命名項
這一切工作正常,除非當我嘗試檢索SelectedItem屬性時,選定的產品具有與列表中的其他產品相同的ProductCode。
因此,例如,可以說我有6種產品:
ProductID | ProductCode | ProductBrandCode
1 t1 abc
2 t34 zyx
3 test123 abc
4 test123 zxc
5 test123 asd
6 t23 asd
如果我選擇了5號產品(5號),在返回的SelectedItem與ID產品= 3。同樣的事情發生,如果我選擇產品id = 4,我總是得到與ProductCode相匹配的第一個產品。我假設這是由於我的ValueMemberPath設置爲ProductCode witch這一事實造成的,在這種情況下,它並不是唯一的,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());
}
有沒有解決這個問題的任何方式? 非常感謝!