3

私の 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」を 6 回)、ListBox での選択は奇妙な動作をします。クリックした要素だけではなく、2 ~ 3 個の要素を選択します。

さらに、別の listBoxItem をクリックしても、前に選択したリストのフォーカスが外れません。

その場合、どの項目が実際に選択されているかを確認することはできず、SelectedIndex 値を取得することもできません。

誰かがアイデアを持っていますか?

4

1 に答える 1

8

問題は、リストボックスが異なる値を区別できないことです。したがって、「10」のいずれかをクリックすると、SelectedItem プロパティが設定され、プレゼンテーションが更新されます。値のタイプを区別できないため、すべての「10」が選択済みとしてマークされます。

しかし、リストボックスに「10」が何度もあるのはなぜですか? 数値 10 や文字列 "10" だけでは意味がありません。

その背後にさらに複雑なモデルがあり、1 つのプロパティのみを表示する場合は、複雑なモデルをバインドして代わりに 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>

敬具
オリバー・ハナッピ

于 2009-10-22T13:28:30.970 に答える