• MVVM Light 行为


    原文地址:http://jesseliberty.com/2011/01/05/windows-phone-from-scratch-mvvm-light-toolkit-soup-to-nuts-part-2/

    作为一个把事件处理从code-behind转移到ViewModel的工具,我们看一下Behavior的介绍。

    行为最初是为了帮助设计师在Blend里更好的设计,但是对程序员也很有帮助。例如,它的一个设计目标是将程序(测试)逻辑的代码(测试这部分是比较复杂困难的)从code-behind转移出来,将其放在ViewModel中,这样设计人员和程序员的工作可以分离开来。总之就是跟分层啊、MVC啊那一套差不多。那怎样做一个事件呢,比如一个按钮单击事件?

    我们将构建

    为了说明这一点,我们返回第一部分的例子,添加一个按钮到首页,将其导航到第二页。如果你用code-behind的方式,应该是写在Button的Click事件里,在这里我们将分两个步骤:

    首先,我们用行为来代替事件处理

    其次,我们用消息(在下一部分讨论)来告诉页面导航到新一页

    重新在Blend中打开上一个例子,如果你没有,可以在这里here.下载。

    修改MainPage.xaml

    删除TextBlock

    给Grid的顶部添加一行

    添加一个按钮,居中,Content设置为Page2,Name为btnPage2

    点击Assets,点击Behaviors,把EventToCommand拖到Button上。释放按钮时, 你会发现EventToCommand 作为Button的一个Child了。在属性面板将其命名为Page2ButtonClicked

    EventName还是保留为Click。我们将在code-behind里绑定这个命令,保存文件,切换到VS2010.

    创建一个可绑定的行为属性

    打开MainViewModel.cs,添加一个RelayCommand类型的属性:

       1: public RelayCommand Page2Command
       2: {
       3:    get;
       4:    private set;
       5: }

    使用RelayCommand需要添加一个引用:

       1: using GalaSoft.MvvmLight.Command;

    在MainViewModel的构造函数里,初始化这个属性的值:

       1: public MainViewModel()
       2: {
       3:    Page2Command = new RelayCommand( () => GoToPage2() );

    这将调用名为GoToPage2的方法,现在创建它:

       1: private object GoToPage2()
       2: {
       3:    System.Windows.MessageBox.Show( "Navigate to Page 2!" );
       4:    return null;
       5: }

    保存并生成,然后返回Blend,在Page2ButtonClicked的属性窗口中找到杂项-Command,选择绑定,打开绑定窗口,选择Page2Command,点击确定。

    运行项目,当点击Page2Button时,弹出来一个对话框。

    你做了什么?

    你做的是在code-behind里把一个behavior绑定到了属性上。这个属性并不是用值来初始化,而是用一个方法,这个方法在behavior被触发的时候调用。

    现在看一下xaml文件里有什么变化,打开MainPage.xaml,查看Button:

       1: <Button x:Name="btnPage2" Content="Page2" Margin="152,0,202,147" VerticalAlignment="Bottom" d:LayoutOverrides="Width">
       2:                 <i:Interaction.Triggers>
       3:                     <i:EventTrigger EventName="Click">
       4:                         <GalaSoft_MvvmLight_Command:EventToCommand x:Name="btnPage2Click" Command="{Binding Page2Command, Mode=OneWay}"/>
       5:                     </i:EventTrigger>
       6:                 </i:Interaction.Triggers>
       7:             </Button>

    这样我们实现了在ViewModel里,而不是在code-behind里处理按钮事件。

    下一部分我们来看看ViewModel如何发送一个消息给View来进行导航。

  • 相关阅读:
    metasploit--multi/samba/usermap_script
    msfcli 不能使用,在新版metasploit不再有效,推荐使用msfconsole
    test.fire渗透测试
    metasploit服务扫描与查点
    Synchronized底层实现
    正在使用的IDEA插件
    JavaWeb
    设计模式
    MySQL
    计算机网络
  • 原文地址:https://www.cnblogs.com/yanxiaodi/p/2297698.html
Copyright © 2020-2023  润新知