2012-03-11 60 views
0

我正在使用MVVM爲大學開發我的第一個WPF應用程序。我無法得到這個特定的綁定工作,雖然我已經遵循以前使用的步驟已經成功。命令綁定不起作用

我有以下XAML片段:

<Button Command="{Binding GetTicketsCommand}" Canvas.Left="50" Canvas.Top="202" Content="Refresh List" Height="25" Width="137" /> 

視圖初始化虛擬機作爲這樣:

public JobListView() 
    { 
     InitializeComponent(); 
     viewModel = new JobListViewModel(this); 
     this.DataContext = viewModel; 
    } 

視圖模型具有按鈕結合稱爲GetTicketsCommand命令,但是當我點擊命令Execute或CanExecute方法的按鈕不會被調用。我創建的命令正在VM構造函數中實例化。

任何想法?

編輯:

命令類是這樣的:

public class GetTicketsCommand : ICommand 
{ 
    private readonly JobListViewModel viewModel; 

    public GetTicketsCommand(JobListViewModel viewModel) 
    { 
     this.viewModel = viewModel;  
    } 

    public bool CanExecute(object parameter) 
    { 
     return true; 
    } 

    public void Execute(object parameter) 
    { 
     viewModel.GetTickets(); 
    } 

    public event EventHandler CanExecuteChanged 
    { 
     add { CommandManager.RequerySuggested += value; } 
     remove { CommandManager.RequerySuggested -= value; } 
    } 
} 

而在視圖模型我只是在構造函數創建一個實例:

public JobListViewModel() 
    { 
     GetTicketsCommand = new GetTicketsCommand(this); 
     dataAccess = new DataLayerClient(); 
    } 
+0

我們可以看到您的視圖模型管理你的命令的代碼? – BoltClock 2012-03-11 10:56:01

+0

您正在使用哪種MVVM工具包? – 2012-03-11 10:56:02

+1

在運行時VS中的輸出窗口中是否存在任何綁定錯誤?你的視圖模型是怎樣的? – nemesv 2012-03-11 10:56:29

回答

2

綁定僅適用於屬性。請確保您的視圖模型中的GetTicketsCommand命令是一個屬性:

public ICommand GetTicketsCommand { get; set; } 

,而不是一個字段:

public ICommand GetTicketsCommand; 
+0

謝謝。多麼愚蠢的錯誤:)其中一個你無法看到臉上盯着你的東西。再次感謝。 – 2012-03-11 11:06:52

1

對於MVVM場景一RelayCommand或DelegateCommand比隨WPF提供的RoutedCommand更合適。

DelegateCommand在Prism框架中提供,並參見http://msdn.microsoft.com/en-us/magazine/dd419663.aspx以獲取有關RelayCommand實現(基於DelegateCommand)的更多詳細信息。

雖然指揮有侷限性。例如,如果命令指出它不能執行,則按鈕將被禁用。如果你想隱藏按鈕呢?命令在重新構想用戶界面時限制了您的範圍。

你可能想看看Caliburn.Micro,它實現Actions。這些可以讓你根據控件類型的默認事件在你的視圖模型上調用動詞,全部基於約定。例如,如果您的視圖上有一個名稱爲Save的按鈕,則在您點擊該按鈕時,視圖模型上的Save方法將被調用。沒有明確的管道是必需的。如果視圖模型上的CanSave屬性返回false,那麼您可以在按鈕的行爲方面擁有更大的靈活性。

+0

感謝您的信息和進一步閱讀。肯定會看看那些。 – 2012-03-11 11:12:10