2010-02-12 31 views
5

Tamam, umarım bu basittir, ancak bir nedenden dolayı doğru bir cevap bulamıyorum ve WPF ile henüz ne yapacağımı bilmiyorum.WPF contextmenu ve ListView

Liste görünümüm var, görüntülenecek nesnelerin gözlenebilir bir koleksiyonuna bağlanır. Bir sürü seçenek içeren bir içerik menüsüne sahip olmak istiyorum. İçerik menüsündeki seçenekler, tıklanan listedeki belirli nesneye göredir (silme, dışa aktarma vb. Gibi şeyler).

Bu yüzden, içerik menüsünün çalıştırdığı komutla parametre olarak iletilmek üzere kullanıcının liste görünümümde sağ tıklattığı nesneye ihtiyacım var.

Bunu nasıl yaparım?

Düzenleme: Çoğunlukla (tamamen olmasa da) bir çözümü tercih edeceğimi belirtmeliyim xaml - Kod arkasında önemli bir kod bulunmasından kaçınmaya çalışıyorum. Bunu yapmanın tek yolu buysa ...

Daha Fazla Düzenle: Önemli olduğunu belirtmeyi unuttuğum daha fazla detay. Çalıştırıldığım komut, kullanıcı denetimimin veri içeriğine bağlı nesne üzerindedir, liste görünümündeki nesneler üzerinde değildir. Bu yüzden, kullanıcı kontrolünün veri bağlamında bulunan bir komuta bağlı olmak için liste görünümünün öğelerindeki bağlam menüsüne ve bu komuta bir parametre olarak iletilen liste görünüm öğesine ihtiyacım var.

cevap

4

ContextMenu öğenizin, tek tek öğelerin şablonunun bir parçası olup olmadığına veya bir bütün olarak Liste Kutusuna eklenmiş olmasına bağlıdır.

Bir DataTemplate kullanarak listedeki öğelere göre ContextMenu (Bunu yapmanın en iyi yolu genellikle), MenuItem üzerinde DataContext zaten ayarlanmış bağlıyorsanız bu yüzden yapmanız gereken tek şey:

<MenuItem ... CommandParameter="{Binding SelectedItem, RelativeSource={RelativeSource FindAncestor,ListBox,1}} /> 
: En ContextMenu bir bütün olarak ListBox bağlıysa Öte yandan
<MenuItem ... CommandParameter="{Binding}" /> 

, sen ListBox ait SelectedItem özelliğine erişmek gerekir