想知道人們對如何以最輕量的方式儘可能好地處理ViewModel中的事件的想法提供了想法。MVVM中的簡單事件處理
例子:
<MediaElement
MediaOpened={Binding SomeEventHandler} />
在這種情況下,我們要處理的視圖模型的MediaOpened事件。沒有像Prism這樣的框架,如何將其綁定到ViewModel?
想知道人們對如何以最輕量的方式儘可能好地處理ViewModel中的事件的想法提供了想法。MVVM中的簡單事件處理
例子:
<MediaElement
MediaOpened={Binding SomeEventHandler} />
在這種情況下,我們要處理的視圖模型的MediaOpened事件。沒有像Prism這樣的框架,如何將其綁定到ViewModel?
Commanding - 你的「SomeEventHandler」必須實現ICommand
一類...有可用的網絡文學一堆...
而且 - 我會考慮讓一個免費的,輕量級的「迷你」 MVVM框架如MvvmFoundation,它提供了RelayCommand爲這樣一個目的(而無需學習PRISM的複雜性/開銷)
編輯:
看一看this b記錄附加命令到任何事件...正如我所提到的那樣,它是非常強大的,但我想你需要做出判斷呼叫,如果這是你想要的,相比於附加一個老式事件,並使用在後面,你的代碼超薄的機身事件處理程序只是調用了一些方法,在你的視圖模型,是這樣的:
public void SomeEventHandler(object sender, SomeEventArgs e)
{
MyViewModel vm = (MyViewModel)this.DataContext;
vm.HandleLoadEvent();
}
務實VS最佳實踐......我跟你走的。)
MediaOpened是一個事件,不支持命令綁定。
爲了綁定到事件,可以使用輔助對象,該對象附着到事件並執行命令。
要綁定到視圖模型,請添加一個實現ICommand的屬性。本MSDN雜誌文章中的圖3顯示了RelayCommand,它是ICommand的有用實現。 RelayCommand使用委託進行初始化,以連接到您的視圖模型。
我得到命令綁定問題,我已閱讀Josh Smith關於MVVM的文章,但是我遇到問題的部分是 「要綁定到事件,可能會使用一個輔助對象附加到事件並執行命令「。 通過助手對象你是否像一個附加行爲? – 2009-12-18 05:20:34
是的,行爲是進行綁定的好方法。 IanR提供的鏈接看起來不錯。 – 2009-12-18 13:01:31
看一看馬龍格列奇的Attached Command Behaviors。它可以很容易地事件綁定到視圖模型命令
小和開源ImpromptuInterface.MVVM框架公頃event binding syntax並在.NET 4.0中使用DLR。雖然這個例子需要繼承ImpromptuViewModel。 event binding property對該特定視圖模型類型沒有任何依賴性,並且所涉及的是公開的。
<Window x:Class="MyProject.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:MVVM="clr-namespace:ImpromptuInterface.MVVM;assembly=ImpromptuInterface.MVVM" Title="MainWindow" Height="600" Width="800">
<MediaElement MVVM:Event.Bind="{Binding Events.MediaOpened.To[MediaElement_MediaOpened]}" />
...
public class MyViewModel{
public dynamic Events
{
get { return new EventBinder(this); }
}
public void MediaElement_MediaOpened(MediaElement sender, RoutedEventArgs e){
...
}
}
我沒想到我能在這種情況下的使用一個ICommand ...感謝您的信息...這是一個有點重複問題,然後。 – 2009-12-18 04:00:57
好吧...我只是嘗試使用ICommand,我使用MVVMFoundation,所以它是一個RelayCommand類型。但是,我得到一個構建錯誤「綁定路徑= MediaOpenedCommand,模式=一次性」'不是一個有效的事件處理程序方法名稱...「我只是把它設置錯了? – 2009-12-18 04:06:42
對不起,是的...您需要將RelayCommand實例綁定到Command,並通過CommandBindings或InputBindings將其綁定到UI ...我強烈建議你稍微閱讀一下 - 從事件到命令的切換是人們對WPF持續關注的那些「陡峭的學習曲線」之一 - 但是當你饒有興趣的時候它就非常強大! – kiwipom 2009-12-18 04:12:22