Поле со списком WPF не отображает выбранное значение - PullRequest
0 голосов
/ 07 мая 2020

Я знаю, что я уже сотый с той же проблемой, и я проверил много ответов на этом сайте, но ни один из них не решил мою проблему.

Я начал с поля со списком в сетке данных, и он работает как

    <ComboBox ItemsSource="{Binding DataContext.ItemList,
                            RelativeSource={RelativeSource Mode=FindAncestor, 
                            AncestorType=DataGrid}}"
              DisplayMemberPath="ItemName"                                   
              SelectedValuePath="ItemID"
              SelectedValue="{Binding ItemID, UpdateSourceTrigger=PropertyChanged}">
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="SelectionChanged">
                <cal:ActionMessage MethodName="AddRowCheck">
                    <cal:Parameter Value="{Binding ElementName=OrderList, Path=CurrentItem}"/>
                </cal:ActionMessage>
            </i:EventTrigger>
        </i:Interaction.Triggers>
    </ComboBox>

Единственная проблема, с которой я столкнулся с этим, заключается в том, что когда я добавляю Items к ItemList, они появляются внизу списка, а не в алфавитном порядке.

Чтобы решить эту проблему, я обновил свой код следующим образом:

    <Window.Resources>
        <CollectionViewSource x:Key="sortedItemList" 
                              Source="{Binding ItemList}">
            <CollectionViewSource.SortDescriptions>
                <scm:SortDescription PropertyName="ItemName" />
            </CollectionViewSource.SortDescriptions>
        </CollectionViewSource>
    </Window.Resources> 
    .......
    <ComboBox ItemsSource="{Binding Source={StaticResource sortedItemList}}"
              DisplayMemberPath="ItemName"                                   
              SelectedValuePath="ItemID"
              SelectedValue="{Binding ItemID, UpdateSourceTrigger=PropertyChanged}">
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="SelectionChanged">
                <cal:ActionMessage MethodName="AddRowCheck">
                    <cal:Parameter Value="{Binding ElementName=OrderList, Path=CurrentItem}"/>
                </cal:ActionMessage>
            </i:EventTrigger>
        </i:Interaction.Triggers>
    </ComboBox> 

, и теперь элементы расположены в алфавитном порядке, но выбранный элемент больше не отображается.

Что такое Я делаю что-то не так?

Я попытался переопределить свою функцию равенства в моем объекте Item, чтобы он проверил идентификатор, чтобы увидеть, равны ли два элемента, но это не решило проблему.

1 Ответ

0 голосов
/ 08 мая 2020

Я сам нашел ответ. Ошибка была в событии, которое сработало после выбора элемента.

В методе AddRowCheck я добавляю новую пустую строку в сетку данных с ComboBox, указывающим на тот же CollectionViewSource.

Я не совсем понимаю лог c, стоящий за ним, но после проверки этого сайта с этой новой информацией я обнаружил, что мне нужно установить

IsSynchronizedWithCurrentItem="False"

, и это сработало.

...