代码之家  ›  专栏  ›  技术社区  ›  Chris Nicol

mvvm中的简单事件处理

  •  9
  • Chris Nicol  · 技术社区  · 15 年前

    例子:

    <MediaElement
         MediaOpened={Binding SomeEventHandler} />
    

    在本例中,我们希望在viewmodel中处理mediaopened事件。如果没有prism这样的框架,如何将其绑定到viewmodel?

    4 回复  |  直到 13 年前
        1
  •  12
  •   kiwipom    15 年前

    Commanding -“someEventhandler”需要是一个实现 ICommand

    MvvmFoundation ,它提供了用于此目的的relaycommand(没有学习棱柱体的复杂性/开销)

    编辑:

    this

    public void SomeEventHandler(object sender, SomeEventArgs e)
    {
        MyViewModel vm = (MyViewModel)this.DataContext;
        vm.HandleLoadEvent( );
    }
    

        2
  •  4
  •   Thomas Levesque    15 年前
        3
  •  0
  •   Doug Ferguson    15 年前

    为了绑定到事件,可以使用附加到事件并执行命令的helper对象。

    若要绑定到视图模型,请添加实现icommand的属性。msdn杂志文章中的图3显示了relaycommand,它是icommand的一个有用实现。relaycommand使用委托初始化,以连接到视图模型。

    http://msdn.microsoft.com/en-us/magazine/dd419663.aspx

        4
  •  0
  •   jbtule    13 年前

    小型开源 ImpromptuInterface.MVVM event binding syntax 使用.net 4.0中的dlr。尽管这个例子需要子类化impromptuviewmodel。这个 event binding property 不依赖于特定的viewmodel类型和 eventbinding provider

     <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){
             ...
        }
    }