如何在Windows Phone 7应用程序中更改其他类的UI属性?

时间:2011-07-05 06:31:14

标签: windows-phone-7

请告诉我如何在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";
    }
}

2 个答案:

答案 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