想知道人们对如何以最轻量的方式尽可能好地处理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