2010-06-17 36 views
8

Tôi có một ứng dụng Surface WPF của Microsoft và tôi đang sử dụng mẫu MVVM.WPF: Ràng buộc các lệnh trong mã phía sau

Tôi có một số nút được tạo ra trong mã đằng sau và tôi muốn để ràng buộc lệnh cho họ, nhưng tôi chỉ biết làm thế nào mà làm việc trong XAML

như thế này:

<Custom:SurfaceButton Command="{Binding SaveReservationCommandBinding, Mode=OneWay}"/> 

Nhưng tôi không thể làm điều đó như thế này bởi vì các nút của tôi không tồn tại trong XAML, chỉ ở đoạn mã phía sau.

Vậy một lệnh ràng buộc như thế sẽ hoạt động như thế nào trong mã phía sau?

Trả lời

15

Giả sử rằng bạn có một tên SurfaceButton của bạn để "SurfaceButton1" và bạn có quyền truy cập vào một thể hiện của các lệnh, bạn có thể sử dụng đoạn mã sau:

SurfaceButton1.Command = SaveReservationCommand; 
+1

+1 để có câu trả lời đúng. Ngoài ra nếu cần thiết, người ta có thể sử dụng Binding in code (http://msdn.microsoft.com/en-us/magazine/cc700358.aspx#id0190003) – Anvaka

+2

Cảm ơn bạn đã trả lời nhanh. Không nghĩ rằng nó sẽ được dễ dàng;) – sofri

+0

Các ràng buộc có thể được thiết lập trong mã phía sau nhưng việc thực hiện không nên được và mã này sẽ chỉ làm việc nếu nó được. – David

3

tôi lấy mã từ liên kết được đăng bởi Anvaka làm mẫu. Tôi sử dụng RadMenuItem của Telerik, nhưng chắc chắn bạn có thể sử dụng bất kỳ thành phần nào khác để lộ thuộc tính Command.

item = new RadMenuItem(); 
item.Header = "Hide Column"; 
DependencyProperty commProp = RadMenuItem.CommandProperty; 
if (!BindingOperations.IsDataBound(item, commProp)) { 
    Binding binding = new Binding("HideColumnCommand"); 
    BindingOperations.SetBinding(item, commProp, binding); 
} 
//this is optional, i found easier to pass the direct ref of the parameter instead of another binding (it would be a binding to ElementName). 
item.CommandParameter = headerlCell.Column; 
menu.Items.Add(item); 

Hy vọng nó giúp ... và nếu một cái gì đó không rõ ràng, xin lỗi, đó là bài viết đầu tiên của tôi :)

12

Câu trả lời được chấp nhận sẽ làm việc tuyệt vời nếu nút có quyền truy cập vào các lệnh. Tuy nhiên, trong MVVM, chúng thường được giữ riêng biệt (Nút trong View và Command trong View-Model). Trong XAML bạn thường sử dụng một ràng buộc dữ liệu để kết nối nó (như ví dụ trong câu hỏi).

Chương trình của tôi đã cho tôi lỗi khi Nút động của tôi không thể tìm thấy Lệnh (vì nó nằm trong một không gian tên hoàn toàn khác). Đây là cách tôi kết thúc giải quyết vấn đề này:

SurfaceButton.SetBinding (Button.CommandProperty, new Binding("SaveReservationCommand")); 
Các vấn đề liên quan