ProductCode를 사용하여 검색하는 AutoCompleteBox가 있습니다. autocompletebox의 항목 소스는 제품 List<Product>
목록이며 Product에는 ProductCode, ProductID, ProductBrandCode 속성이 있습니다.WPF AutoCompleteBox - 목록에서 첫 번째 일치 항목을 반환하는 simillar 명명 된 항목
선택한 제품의 목록에있는 다른 제품과 동일한 ProductCode가있는 경우 SelectedItem 속성을 검색하려고 할 때를 제외하고 모두 정상적으로 작동합니다.
그래서 예를 들어, 내가 6 개 제품이 있다고 할 수 있습니다 : 내가 선택한 경우 내가 5 제품 (5 ID)을 선택하면ProductID | ProductCode | ProductBrandCode
1 t1 abc
2 t34 zyx
3 test123 abc
4 test123 zxc
5 test123 asd
6 t23 asd
을의 selectedItem가이 ID와 제품을 반환 = 3 같은 일이 발생 id = 4 인 제품은 항상 ProductCode와 일치하는 첫 번째 제품을 얻습니다. 나는 이것이 ValueMemberPath가 ProductCode로 설정되었다는 사실에 기인한다고 가정하고 있습니다.이 경우에는 마녀가 유일하지 않고 autoCompleteBox가 처음으로 일치하는 ProductCode를 선택합니다. 목록에 중복되는 ProductCode가없는 제품을 선택하면 완벽하게 작동합니다.
<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>
그리고 내 코드에서 나는 다음과 같이 선택한 항목을 검색 :
이는 XAML에서 모습입니다
private void autoTxtBoxProductCode_PreviewKeyUp(object sender, KeyEventArgs e)
{
Product prd = (Product)(autoTxtBoxProductCode.SelectedItem);
MessageBox.Show(prd.ProductID.ToString());
}
이 문제를 어떤 방법이 있나요? 대단히 감사합니다!