2012-08-30 34 views
12

Tôi đang làm việc trên ứng dụng Windows-phone của mình, sử dụng một số ràng buộc dữ liệu đơn giản. Tôi đã allready tạo ra một ứng dụng mà được dựa trên các ứng dụng phương pháp lập trình MvvM. Tôi đang curently làm việc trên cũng hoạt động bằng phương pháp MvvM. Bởi vì tôi muốn giữ mã của tôi phía sau càng sạch càng tốt, tôi đã tìm kiếm một cách để làm cho "sự kiện bấm nút" (mà normaly diễn ra trong trang codebehind) diễn ra trong viewmodel của tôi hoặc mainviewmodel.Liên kết một nút với lệnh (Windows Phone 7.5)

Tôi đã tìm kiếm trên Internet cần một lời giải thích đơn giản cho giao diện Icommand vì tôi tin rằng đó là cách để đi. Vấn đề với những giải thích mà tôi tìm thấy là một số trong số đó dựa trên bộ công cụ MvvMlight sử dụng chức năng CommandRelay. Tôi không muốn sử dụng bộ công cụ ánh sáng MvvM vì tôi muốn tự mình hiểu những thứ đầu tiên. Các hướng dẫn khác tôi tìm thấy đã được viết bởi các nhà phát triển enthousiastic mà cung cấp cho bạn một overkill thông tin.

Vì vậy, cơ bản. Ai đó có thể chỉ cho tôi phiên bản Đơn giản nhất của một Icommand ràng buộc với một nút hoạt động không?

Trả lời

21

Trong XAML của bạn:

<Button Content="My Button" Command="{Binding MyViewModelCommand}" /> 

Theo quan điểm của mô hình của bạn:

public class MyViewModel 
{ 

    public MyViewModel() 
    { 
     MyViewModelCommand = new ActionCommand(DoSomething); 
    } 

    public ICommand MyViewModelCommand { get; private set; } 

    private void DoSomething() 
    { 
     // no, seriously, do something here 
    } 
} 

INotifyPropertyChanged và cợt xem mô hình khác elided.
Một cách khác để cấu trúc lệnh trong kiểu xem của bạn được hiển thị ở cuối câu trả lời này.

Bây giờ, bạn sẽ cần triển khai ICommand. Tôi đề nghị bắt đầu với một cái gì đó đơn giản như thế này, và mở rộng hoặc thực hiện các tính năng khác/lệnh khi cần thiết:

public class ActionCommand : ICommand 
{ 
    private readonly Action _action; 

    public ActionCommand(Action action) 
    { 
     _action = action; 
    } 

    public void Execute(object parameter) 
    { 
     _action(); 
    } 

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

    public event EventHandler CanExecuteChanged; 
} 

Dưới đây là một cách khác để bố trí xem mô hình của bạn:

public class MyViewModel 
{ 
    private ICommand _myViewModelCommand; 
    public ICommand MyViewModelCommand 
    { 
     get 
     { 
      return _myViewModelCommand 
       ?? (_myViewModelCommand = new ActionCommand(() => 
       { 
        // your code here 
       })); 
     } 
    } 
} 
+0

Cảm ơn bạn Jay đó là chính xác những gì tôi đã tìm kiếm :) máy bay và đơn giản :) –

2

Để thêm vào Jays câu trả lời:

My mọi thời đại ưa thích là DelegateCommand từ Patterns và đội Practices @ Microsoft. Hãy xem this post để biết thêm thông tin.

Các vấn đề liên quan