更新Windows 8 C# Metro应用程序的GUI界面

5
我使用C#在Visual Studio 11 Ultimate中创建了一个基本的Win 8 Metro应用程序。问题在于我想显示随特定事件动态更改的文本。例如,当单击鼠标时,屏幕上会显示一个数字,并每次递增1。我已经使用XAML绑定到我创建的数据结构,该数据结构确实获取我需要显示的值,但问题是随着这些值的更改,GUI上显示的数字不会发生变化。如何将我的XAML绑定到动态更改的数据,以便XAML显示也随之更改?感谢您的帮助!-- 编辑 - 我已经实现了INotifyPropertyChanged接口,但现在我从此代码行收到异常:PropertyChanged(this,new PropertyChangedEventArgs(propertyName));以下是异常信息:应用程序调用了为不同线程编组的接口。(HRESULT异常:0x8001010E(RPC_E_WRONG_THREAD))

1
一些示例代码将有助于此处的起点 :-) - Chris Shain
根据 HRESULT 错误代码,听起来你正在尝试在处理它的线程之外更改控件。 - Security Hound
你是如何处理鼠标的“点击”事件的呢?在你的代码后台中使用事件吗?还是在你的视图模型中使用ICommand?根据你处理点击的位置,也就是我假设你设置属性以显示的位置,你必须将PropertyChanged事件调度回UI线程。 - Thelonias
1个回答

7
确保您要绑定的“数据结构”(正确地)实现了INotifyPropertyChanged,并在需要通知 UI 发生更改时调用 PropertyChanged 事件。

这是允许 xaml 层知道绑定数据何时更改并相应更新的接口。


根据新信息进行编辑:

应用程序调用了为不同线程分配的接口。 (HRESULT 从 0x8001010E(RPC_E_WRONG_THREAD) )

这意味着您正在从单独的线程引发属性更改,这将潜在地导致问题。 您可能需要使用CoreDispatcher.RunAsync将其传回主线程。 有关详细信息,请参见此线程


唯一的问题是CoreDispatcher.Invoke不再受支持。 - Joshua Mak
@JoshuaMak 是的 - 我总是忘记它需要切换到 RunAsync - 已修复。 - Reed Copsey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接