2010-10-25 42 views
6

Tôi đang sử dụng thuộc tính Binding IsAsync để giữ dữ liệu đáp ứng và tải giao diện người dùng từ trình truy cập nhận tài sản và được chứng minh là một tùy chọn tốt khi sử dụng MVVM. Cách tiếp cận này rất tuyệt và không cần bất kỳ mã thủ công nào cho các hoạt động không đồng bộ. Có vài trường hợp tải dữ liệu của tôi mất vài giây và trong thời gian này rất khó để phân biệt giữa "không có dữ liệu" so với "tải dữ liệu". Có một tài sản mà tôi có thể phát hiện trạng thái của ràng buộc "IsBusy" hoặc "Đang tải", để tôi có thể hiển thị một số thông báo rằng thao tác tải chưa hoàn tất?Kết nối WPF làAsync Nhận trạng thái

Mọi trợ giúp đều được đánh giá cao.

Trả lời

7

According to the docs,

Trong khi chờ đợi cho giá trị đến, các báo cáo liên kết các FallbackValue, nếu ai có sẵn, hoặc giá trị mặc định của các ràng buộc thuộc tính target.

Bạn có thể sử dụng giá trị này để hiển thị thông báo cho người dùng trong khi liên kết đang tải.

+0

Cảm ơn Will ... Đang cố gắng tìm cách để liên kết thông qua viewmodel và/hoặc xaml với cửa sổ bật lên "Chờ" .. cung cấp mức độ đơn giản rất lớn với mô hình ứng dụng WPF - MVVM. Tuy nhiên .. có vẻ như không có cách nào đơn giản để đạt được điều này. – Bhuvan

+0

@Bhuvan: Bạn cũng có thể có một tài sản enum công khai để lộ trạng thái hiện tại của máy ảo ... Đã khởi tạo, Đang tải, Sẵn sàng. Sau đó, bạn có thể liên kết với điều đó trong giao diện người dùng và hiển thị cho người dùng bất cứ điều gì bạn muốn trong các tiểu bang đó ... – Will

17

Tôi biết, đó là một chuỗi cũ. Nhưng nếu ai vẫn còn quan tâm đến ...

Bạn có thể sử dụng PriorityBinding, có một tuyệt vời giải thích ví dụ trong bài viết này: http://www.switchonthecode.com/tutorials/wpf-tutorial-priority-bindings

Ý tưởng là để quy định một PriorityBinding do đó định nghĩa nhiều ràng buộc thường xuyên như thế này :

<TextBlock HorizontalAlignment="Center" VerticalAlignment="Center"> 
    <TextBlock.Text> 
     <PriorityBinding> 
     <Binding ElementName="MainWindow" Path="Slow" IsAsync="True" /> 
     <Binding ElementName="MainWindow" Path="Fast" /> 
     </PriorityBinding> 
    </TextBlock.Text> 
    </TextBlock> 

Thứ tự của các ràng buộc sẽ quyết định ưu tiên, có mức độ ưu tiên cao nhất trước. Trong trường hợp này, Fast binding (priority thấp nhất) sẽ tạo textblock ngay lập tức bởi vì bạn có thể có ràng buộc với một thuộc tính chuỗi "Loading ..." hoặc "Sorting ..." tùy thuộc vào những gì đang xảy ra tại thời điểm đó, và có không chậm trễ.

Nhưng sau này khi thuộc tính ràng buộc async chậm trả về một giá trị, ưu tiên cao hơn có nghĩa là nó sẽ chiếm ưu thế, vì nó sớm hơn trong danh sách và kết quả của nó sẽ bị ràng buộc thay thế.

Nếu bạn cần đưa vào cửa sổ bật lên tiến trình, bạn có thể triển khai trong trình thu thập thuộc tính bị ràng buộc trong ViewModel của bạn, mặc dù tôi chưa thử bất cứ điều gì như thế này.

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