2010-04-23 18 views
15

Tôi đang sử dụng ánh sáng mvvm để tạo ứng dụng Silverlight. Có đoạn mã nào cho biết cách truy cập thuộc tính hoặc lệnh của mô hình chế độ xem từ bên trong mô hình chế độ xem khác hoặc mã kiểm soát của người dùng sau không?Ánh sáng MVVM - cách truy cập thuộc tính trong kiểu xem khác

Tôi đoán nó đơn giản, nhưng tôi bằng cách nào đó đã bỏ lỡ điều gì đó.

Ueli

+0

Tùy thuộc vào việc thực hiện các điều khiển của bạn. Bạn có đang chia sẻ ViewModel giữa các chế độ xem dưới chế độ xem gốc hoặc bạn chỉ đang cố gắng chia sẻ thuộc tính/Lệnh giữa hai chế độ xem độc lập? –

+0

Chế độ xem được đề cập có thể được lồng trong các chế độ xem khác nhau nhưng nó chuyển tiếp trên chế độ xem có thể truy cập thuộc tính từ chế độ xem độc lập. Trong trường hợp cụ thể của tôi đó là một CardViewModel mà cần phải lấy một thông tin về người dùng hiện đang đăng nhập (xử lý và lưu trữ trong một UserViewModel độc lập) để thực hiện cuộc gọi đến một webservice. –

Trả lời

34

Bạn có thể sử dụng Messenger để làm điều này: Gửi người dùng trong UserViewModel:

Messenger.Send<User>(userInstance); 

sẽ chỉ gửi cho người dùng cho bất cứ ai quan tâm.

Và đăng ký một người nhận trong CardViewModel của bạn:

Messenger.Register<User>(this, delegate(User curUser){_curUser = curUser;}); 

hoặc bạn cũng có thể gửi yêu cầu từ CardViewModel của bạn cho la hét người dùng:

Messenger.Send<String, UserViewModel>("Gimme user"); 

Và phản ứng trên rằng trong UserViewModel:

Messenger.Register<String>(this, delegate(String msg) 
{ 
if(msg == "Gimme user") 
Messenger.Send<User>(userInstance); 
}); 

(Bạn nên sử dụng enum chứ không phải chuỗi trong trường hợp thực tế:))

Perhabs thậm chí bạn có thể phản hồi trực tiếp nhưng tôi không thể kiểm tra tại thời điểm này.

Chỉ cần kiểm tra này ra: Mvvm light Messenger

+0

Tuyệt vời, đó là những gì tôi cần. (và bây giờ có vẻ rất rõ ràng là nó khiến tôi cảm thấy như một thằng ngốc ...). Cảm ơn ond n Gruess chúng tôi Brazil. –

+0

Chào mừng bạn :) và en gruess uss de chalte schwiiz zrugg;) – CodeWeasel

4

Một cách khác là sử dụng sự quá tải của RaisePropertyChanged mà cũng phát sóng thay đổi. Bạn sẽ làm điều này:

RaisePropertyChanged(() => MyProperty, oldValue, newValue, true); 

Sau đó, trong thuê bao:

Messenger.Default.Register<PropertyChangedMessage<T>>(this, Handler); 

nơi T là loại myProperty.

Cheers Laurent

0

Một cách khác để xem xét vấn đề là phải có một dịch vụ mà trả về "hiện đang đăng nhập người dùng".

Trách nhiệm xử lý những người đã đăng nhập là trách nhiệm của dịch vụ nhiều hơn, và Chế độ xem vẫn đơn giản.

Chế độ xemMô hình sẽ chỉ tồn tại cho Chế độ xem. Nhưng, là công dân tốt, họ cũng có thể cung cấp trợ giúp cho các Chế độ xem khác như Laurent và CodeWeasel đang hiển thị.

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