0

MvvmlightバインディングリストボックスSelectedIndexについて質問があります。完全なソースコードはここからダウンロードできます。これが私の前提条件です:

[TestModel]

string Title;
string Description;

[TestViewModel]

ObservableCollection<TestModel> TestList;

[xamlバインディング]

<ListBox ItemSource="{Binding TestList}"
         SelectedIndex="{Binding SelectedIndex Mode=TwoWay}">
       .....
       <i:EventTrigger EventName="SelectionChanged">
       .....
       </i:EventTrigger>.....

これが私のOnSelectionChangedコードです:

 private void OnSelectionChanged(TestModel test)
    {
        int index = SelectedIndex;
        Debug.WriteLine("[SelectionChanged] +++, index={0}", index);
        // If selected index is -1 (no selection) do nothing
        if (-1 == SelectedIndex)
            return;
        Debug.WriteLine("[SelectionChanged] selected item={0}", test.Title);
        // Reset selected index to -1 (no selection)
        SelectedIndex = -1;
        Debug.WriteLine("[SelectionChanged] ---, index={0}", index);
    }

MainPage.xamlとTestPage.xamlのサンプルがあります。

  1. MainPage:このページにはボタンがあります。ボタンをクリックするとTestPageに移動します
  2. TestPage:このページにはリストボックスとViewModelへのバインドがあります

このサンプルを実行し、ボタンをタップしてTestPageに移動し、リストボックスの任意のアイテムをタップしようとすると、アイテムにフォーカスされた色がないことがわかります(SelectedIndexを-1にリセットしたため)。

ここに質問があります。MainPageに戻ってからもう一度TestPageのボタンをタップすると、リストボックスの任意のアイテムをタップすると、すべてのアイテムにフォーカスされた色が表示されます。これは奇妙なことです。

誰かが私のサンプルに問題があるかどうかを確認するのを手伝ってくれることを願っています。ありがとう。

4

1 に答える 1

1

以下の誰かから回避策を入手しました:

変化する:

<i:EventTrigger EventName="SelectionChanged">

に:

<i:EventTrigger EventName="Tap">

それは本当に私が期待したように機能します。 タップすると、ユーザーはListItemを繰り返しタップできます。また、「reset SelectedIndex = -1」を使用すると、ハイライト色なしで選択したアイテムを作成できます。

于 2012-05-17T13:26:45.120 に答える