2012-05-25 30 views
5

Tôi đã tạo một ứng dụng Metro cơ bản cho Win 8 bằng Visual Studio 11 Ultimate trong C#.Cập nhật GUI của Windows 8 C# Metro App

Vấn đề ở đây là tôi muốn hiển thị văn bản thay đổi động với các sự kiện nhất định. Một ví dụ sẽ là một ứng dụng mà một số được hiển thị trên màn hình và tăng thêm 1 bất cứ khi nào con chuột được nhấp.

Tôi đã sử dụng XAML ràng buộc với cấu trúc dữ liệu mà tôi đã tạo để nhận giá trị tôi cần hiển thị, nhưng vấn đề là khi những giá trị đó thay đổi, các số hiển thị trên GUI không thay đổi.

Làm cách nào để liên kết XAML với dữ liệu tự động thay đổi để hiển thị XAML trên GUI cũng thay đổi?

Cảm ơn sự giúp đỡ!

- chỉnh sửa -

Tôi đã thực hiện giao diện INotifyPropertyChanged, nhưng bây giờ tôi nhận được một ngoại lệ từ dòng mã này:

PropertyChanged (this, PropertyChangedEventArgs mới (propertyName));

Dưới đây là thông tin ngoại lệ:

Ứng dụng được gọi là giao diện được sắp xếp theo một chủ đề khác. (Ngoại lệ từ HRESULT: 0x8001010E (RPC_E_WRONG_THREAD))

+1

Một số mã mẫu sẽ giúp làm điểm xuất phát tại đây :-) –

+0

Có vẻ như bạn đang cố thay đổi điều khiển bên ngoài luồng xử lý nó (dựa trên mã lỗi HRESULT). –

+0

Bạn xử lý việc "nhấp chuột" như thế nào? Sự kiện trong mã của bạn đằng sau? Một ICommand trên viewmodel của bạn? Tùy thuộc vào nơi bạn đang xử lý các nhấp chuột, đó cũng là nơi tôi giả sử bạn đang thiết lập thuộc tính của bạn để hiển thị, bạn phải sắp xếp lại sự kiện PropertyChanged trở lại chủ đề giao diện người dùng. – Thelonias

Trả lời

7

Hãy chắc chắn rằng "cấu trúc dữ liệu" của bạn, bạn đang ràng buộc để (đúng) thực hiện INotifyPropertyChanged và gọi sự kiện PropertyChanged khi bạn muốn thông báo giao diện người dùng của một sự thay đổi.

Đây là giao diện cho phép lớp xaml biết khi nào giá trị thay đổi trong dữ liệu bị ràng buộc và cập nhật tương ứng.


Chỉnh sửa để đáp ứng với những thông tin mới:

Ứng dụng này được gọi là giao diện đã được marshalled cho một chủ đề khác nhau. (Ngoại lệ từ HRESULT: 0x8001010E (RPC_E_WRONG_THREAD))

Điều này cho thấy bạn đang nâng sở hữu thay đổi từ một thread riêng biệt, trong đó có khả năng sẽ gây ra vấn đề. Bạn có thể cần sắp xếp lại chủ đề này bằng cách sử dụng CoreDispatcher.RunAsync. Để biết chi tiết, hãy xem this thread.

+0

Chỉ có vấn đề là CoreDispatcher.Invoke không còn được hỗ trợ. –

+0

@JoshuaMak Yeah - luôn luôn quên rằng nó cần phải chuyển sang RunAsync - cố định. –

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