2015-10-13 184 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 –