2011-10-24 7 views
15

Whats cách tốt nhất để ràng buộc một sự kiện WPF trong View to the ViewModel?Sự kiện WPF ràng buộc từ Xem sang Chế độ xemMô hình?

Tôi nhận được sự kiện thả trong Chế độ xem nhưng tôi muốn thay thế sự kiện đó thành ràng buộc do ViewModel. Tìm thấy một số giải pháp nhưng không ai trong số họ đã làm những gì tôi mong muốn.

Xem mã:

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

Imo ràng buộc một sự kiện để một viewmodel không bao giờ là một ý tưởng tốt. Tất nhiên, nó phụ thuộc vào cách bạn muốn MVVM làm việc cho bạn, nhưng chúng tôi tách riêng các sự kiện, đó là logic ui, và các lệnh là logic nghiệp vụ. Chỉ muốn thêm điều này :) vào cuối nó phụ thuộc rất nhiều về cách thức và những gì bạn muốn đạt được. – dowhilefor

+0

Cảm ơn, bình luận tốt đẹp tôi sẽ ghi nhớ điều này. Bây giờ tôi chỉ muốn mã đằng sau các tệp để trống. Nhưng từ tất cả những gì tôi đã đọc bạn là đúng;) – jefsmi

+0

@ dowhilefor đó là một câu trả lời của chính nó - và một tốt nhất. Tôi đề nghị bạn viết một cái gì đó lên. :) – ANeves

Trả lời

37

Một cách để xử lý các sự kiện trong MVVM và XAML là sử dụng các tính năng Blend Tương tác. Không gian tên này chứa các lớp InvokeCommandAction và CallMethodAction.

InvokeCommandAction cho phép bạn liên kết bất kỳ sự kiện nào với lệnh dạng xem trong khi CallMethodAction cho phép bạn ràng buộc bất kỳ sự kiện nào với phương thức kiểu xem.

Ví dụ, nếu bạn muốn để ràng buộc sự kiện DoubleClick của một nút đến một lệnh xem mô hình mà bạn sẽ làm như thế này:

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

Và tuyên bố namespace này:

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

Tất cả các bạn cần phải tham khảo nó trong các dự án của bạn là cài đặt Expression Blend hoặc Expression Blend SDK.

3

Vâng một cách để làm là để chuyển đổi sự kiện đó vào một lệnh và sau đó liên kết nó với người dẫn chương trình lệnh, ví dụ bằng cách định nghĩa hành vi sự kiện.

Xem này, WPF Event Binding to ViewModel (for non-Command classes)

+0

Tôi tìm thấy giải pháp EventToCommand nhưng tôi không phải là người hâm mộ lớn của nó vì vậy muốn biết nếu có cách tốt hơn để giải quyết điều này nhưng cảm ơn;) – jefsmi

+1

:) bạn có thể thử các giải pháp tài sản đính kèm nếu phù hợp với bạn – whoisthis

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

</Button> 

lệnh

{eb: EventBinding} (Simple đặt tên mô hình để tìm lệnh)

{eb: EventBinding Command = CommandName}

CommandParameter

$ e (EventAgrs)

$ này hoặc $ this.Property

chuỗi

https://github.com/JonghoL/EventBindingMarkup