请告诉我如何在Windows Phone 7应用中更改其他类的UI属性(例如文本块,文本框等)?
我的代码图像是这样的:
MainPage.xaml.cs中
public partial class MainPage : PhoneApplicationPage
{
// Constructor
public MainPage()
{
InitializeComponent();
//call other class method
OtherClass a = new OtherClass();
//Update method is executed different thread.
a.Update();
}
}
OtherClass.cs
public OtherClass
{
//execute the method in async.
Thread a = new Thread(new TreadStart(Update));
a.Start();
public static void Update()
{
//Can I do that?? (textBlock1 is MainPage's property.)
textBlock1.Text = "abc";
}
}
答案 0 :(得分:1)
从其他classess访问GUI不是很好的应用程序设计。您应该考虑使用MVVM设计模式。然后你的“OtherClass”将成为视图模型,视图将使用数据绑定来检索数据。
如果您仍想使用您的方法,请尝试在您的MainPage中使用Singleton模式。
答案 1 :(得分:1)
首先 - 我希望我从一开始就采用MVVM和DataBinding,现在它将是一个PITA,所以如果你没有做太多代码,那么更好地改变那个官方模式..
如果没有,这就是我现在的方式,现在翻译成你的例子:
MainPage.xaml.cs上的UI-Thread:
..
a.Update(this); //this = reference to MainPage
OtherClass: ..
public static void Update(PhoneApplicationPage mainRef)
{
Deployment.Current.Dispatcher.BeginInvoke(() => //this will async. execute in UI
{((MainPage)mainRef).textBlock1.Text = "abc";} ); //casting mainRef to MainPage
} //and access textBlock1
认为它丑陋,我不知道传递MainPages对象是否有很多开销,但应该是线程保存(感谢..BeginInvoke)
考虑使用MVVM; D
谢