2015-10-13 94 views
0

我需要一些答案在这里,因为似乎无法找到很多在线回答我的问题。根据我的理解,在编写WPF应用程序时要遵循MVVM工作流程,数据,逻辑和用户输入需要分开。MVVM和自定义命令?

所以,遵循这个逻辑我猜我会创建一个名为Classes的文件夹,然后创建一个名为Commands.cs的类文件。

Commands.cs

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace Duplicate_Deleter.Classes 
{ 
    class WindowCommands 
    { 

    } 
    class DatabaseCommands 
    { 

    } 
    class OtherCommands 
    { 

    } 
} 

然后我有,所以我的用户输入窗知道什么命令是对引用我的XAML中该类文件?

<Window 
xmlns:local="clr-namespace:Classes.Commands"> 
</Window> 

那么当然我会安装,所以它知道用于每个状态,这方法的命令,e.g:

<Window.CommandBindings> 
     <CommandBinding Command="WindowCommands.WindowClose" Executed="CloseWindow_Executed" CanExecute="CloseWindow_CanExecute" /> 
     <CommandBinding Command="WindowMinimize" Executed="CloseWindow_Executed" CanExecute="CloseWindow_CanExecute" /> 
    </Window.CommandBindings> 

我在想就在这里?有人可以澄清这一点或解释如何做我想做的事情,如果我做错了?

+0

你的意思是MVVM,不是MVVP,对吧?否则什么是MVVP? –

+0

废话呀!抱歉!大声笑 –

+0

我不知道你在哪里得到这些信息,但我建议永远不要回到这些地方。 – Will

回答

2

Martyn,

让我们把事情弄清楚。

命令是MVVM的重要组成部分。

但大部分时间Commands(ICommand的实现者)是ViewModel对象的属性。

public class MyViewModel{ 
    public ICommand SaveCmd { get; set; } 
} 

CommandSources像按钮和的MenuItems绑定命令:

<Button Command="{Binding SaveCmd}" Content="Save" /> 

ICommmand包含两个方法:

  1. 无效执行(......) - 他们做了什么
  2. BOOL CanExecute (...) - 告诉GUI禁用按钮,菜单项,...

命令位于ViewModel一侧,因此它们可以轻松调整视图的数据,如果数据对于要执行的命令而言不正确则禁用。

所有你显示的是:CommandBindings,很有趣,但更少使用。

  • 有了,你可以在GUI上侧安装代码与所有的回调化CommandBindings(执行PreviewExecutes,CanExecute,PreviewCanExecute)

  • 您也可以绑定一些输入手势对应(键盘或)鼠标带有InputBindings的命令

  • 有一些预定义的命令,比如ApplicationCommands(Save,New,...),但它定义了它们的行为。

  • 这些CommandBindings的有趣之处在于它们从您的层次结构(Window)的根目录“隧道”到目标和“泡泡”到根目录。
    隧道层次结构中的每一级(网格,StackPanel中,ListBox的...),可以将事件处理方式(停止)在任何级别

希望它能帮助,视

+0

这是一个很好的方式来做我以后的事情吗? http://www.codeproject.com/KB/WPF/CentralizingWPFCommands.aspx?display=Print –