2012-03-26 12 views
0

ObservableCollectionにバインドされたListBoxがあります。ListBoxItem on MouseLeftButtonUp

マウスが離されたときにListBoxItemを選択したい(MouseLeftButtonUpを意味する)だけでなく、選択を切り替える必要がある。 ListBoxItemが選択されているときにアイテムを再度選択すると、そのアイテムが選択解除され、その逆も同様です。

ListBoxItemを選択すると、別のスタイルも適用する必要があります。

私は以下のように試みました。

ListBoxItemにDataTemplateとStyleを使用し、EventSetterでMouseLeftButtonUpのイベントをサブスクライブしました。イベントハンドラでアイテムを選択して切り替えました。

問題は、項目を選択する方法(Ctrl +矢印キー、Shift +矢印キー、矢印キー、Ctrl + A)と選択のスタイルを適用する方法があります。

私は 'Name'プロパティを使用して、DataTemplateのDataバインディングの他の目的ですでに使用されているListBoxItem(Tagプロパティ)の以前の状態を保存しています。

これをどのように達成できますか?

ご迷惑をおかけして申し訳ございません。

答えて

0

私が提案する最初のことは、MouseLeftButtonUpの使用を忘れ、代わりにコントロールのSelectedItemをコード内の変数にバインドすることです。そうすれば、ユーザーがキーボードを使うことを決めると、すべてが閉じ込められます。

<ListBox x:Name="lbItems" ItemsSource="{Binding Path=MyListItems}" SelectedItem="{Binding Path=SelectedItem, Mode=TwoWay}"/> 

public ObservableCollection<YourClass> MyListItems 
public YourClass SelectedItem 

これにより、ユーザーが項目を選択するとすぐにSelectedItemが自動的に設定されます。

次に、もう一度クリックするとアイテムが選択解除されるべきですか?これは標準的な動作ではありません。アイテムを選択解除する必要がありますか?

以前に選択した項目を記録したい場合は、のSelectedItemが変化したときに設定

private YourClass _previousSelectedItem; 

private YourClass _selectedItem; 
public YourClass SelectedItem 
    { 
    get { return _selectedItem;} 
    set { if (_selectedItem == value) return; 
      _previousSelectedItem = _selectedItem; 
      _selectedItem = value; 
     } 
    } 

を持つことができます。

あなたにはいくつかのアイデアがありますか?

関連する問題