2011-10-24 26 views
15

WPF olayını ViewModel'e bağlamada en iyi yol nedir?WPF olayı ViewModel'e bağlanıyor mu?

Görünümümde bir düşüş olayı var, ancak bunu ViewModel nedeniyle bağlanmaya zorlamak istiyorum. Birkaç çözüm bulundu ancak bunların hiçbirini istediğim gibi yapmadım.

Görünüm kodu:

<TextBox 
    AllowDrop="True" 
    PreviewDrop="email_Drop" /> 
+4

iyi bir fikir değildir. Tabii ki, MVVM'nin sizin için nasıl çalışmasını istediğinize bağlı olarak değişiriz, fakat biz mantıksal olan Olayları ve iş mantığı olan komutları kesinlikle ayırırız. Sadece bunu eklemek istedim :) sonunda nasıl ve ne elde etmek istediğinize bağlı. – dowhilefor

+0

Teşekkürler, güzel yorum bunu aklımda tutacağım. Şimdilik sadece dosyaların arkasındaki kodun boş olmasını istiyorum. Ama okudum her şeyden haklısın;) – jefsmi

+0

@dowhilefor kendi başına bir cevap - ve iyi bir. Bir şey yazmanı öneririm. :) – ANeves

cevap

37

bir yolu Blend Etkileşim özelliklerini kullanmaktır. Bu ad alanı InvokeCommandAction ve CallMethodAction sınıflarını içerir.

InvokeCommandAction, herhangi bir olayı bir görünüm modeli komutuna bağlamanıza izin verirken, CallMethodAction herhangi bir olayı bir görünüm modeli yöntemine bağlamanıza izin verir.

Örneğin

Eğer böyle yapacak bir görünüm model komutuna bir Button DoubleClick olayı bağlamak istiyorsanız:

xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" 

tek şey:

<Button> 
    <i:Interaction.Triggers> 
     <i:EventTrigger EventName="MouseDoubleClick"> 
      <i:InvokeCommandAction Command="{Binding Path=DoSomethingCommand}"/> 
     </i:EventTrigger> 
    </i:Interaction.Triggers> 
</Button> 

Ve bu ad alanını beyan Projelerinizde referans göstermeniz, Expression Blend veya Expression Blend SDK'yı kurmaktır.

3

Eh yapmanın bir yolu bir komuta içine olayı dönüştürmek ve daha sonra olay davranışını tanımlayarak komutu, yani sunum yapan kişiye bağlamak etmektir. MVVM ve XAML olayları işlemek için

bu Bkz

, WPF Event Binding to ViewModel (for non-Command classes)

+0

EventToCommand çözümünü buldum ama bunu çözmek için daha iyi yollar olup olmadığını bilmek istediğim çok büyük bir hayranı değilim;) – jefsmi

+1

:) Eğer uygunsa, size bağlı mülk çözümünü deneyebilirsiniz – whoisthis

1
<Button MouseDoubleClick="{eb:EventBinding Command=DoSomethingCommand}"> 

</Button> 

komut

{eb: EventBinding}

{eb: EventBinding komut = CommandName} (Komut bulmak için basit bir adlandırma model)

CommandParameter

$ e (EventAgrs)

$ şu ya Imo ViewModel Etkinlik bağlama $ this.Property

dize

https://github.com/JonghoL/EventBindingMarkup

İlgili konular