WPF listbox: проблема с выделением - PullRequest
3 голосов
/ 22 октября 2009

В моем XAML-файле у меня ListBox объявлен так:

           <ListBox x:Name="lstDeck" Height="280" ItemsSource="{Binding Path=Deck}"  >
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <ListBoxItem  Content="{Binding}" />
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>

В моей модели представления Deck - это ObservableCollection, поэтому привязка напрямую отображает содержимое моей коллекции.

Но когда у меня есть несколько значений, которые содержат одно и то же значение (например, «10» шесть раз), выбор в ListBox выглядит странно: он выбирает 2-3 элемента вместо того, на котором я нажал.

Более того, когда я щелкаю по другому списку BoxItem, он не фокусируется на предыдущем выбранном.

Тогда невозможно увидеть, какой элемент фактически выбран, и невозможно получить значение SelectedIndex.

У кого-нибудь есть идея?

1 Ответ

8 голосов
/ 22 октября 2009

Проблема в том, что список не может различать разные значения.Поэтому, как только вы щелкаете одну из «10», она устанавливает свойство SelectedItem и обновляет его представление.Поскольку он не может различить типы значений, он помечает каждую «10» как выбранную.

Но почему у вас есть «10» несколько раз в списке?Если это просто числовое значение 10 или строка «10», это не имеет никакого смысла для меня.

Если у вас есть более сложная модель за ней, и вы просто отображаете одно свойство, чем вы должны связатьсложную модель и установите вместо него DisplayMemberPath.

C #

public class Model
{
    public Guid Id { get; set; }
    public string Value { get; set; }
}

XAML

<ListBox ItemsSource="{Binding Path=Models}" DisplayMemberPath="Value" />

<ListBox ItemsSource="{Binding Path=Models}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Path=Value}" />
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

С наилучшими пожеланиями
Оливер Ханаппи

...