数据将静态类的字符串变量绑定到Phone 7中的textBlock?

时间:2011-03-16 09:10:31

标签: c# silverlight data-binding windows-phone-7

这是C#代码

public static class Global
{
    public static string Temp 
    { 
        get 
        {
            return temp;
        }
        set
        {
            temp = value;
        }
    }

    public static string temp="100";

}

这是MainPage的xaml代码

 <TextBlock Text="{Binding Path=Temp}" Grid.Column="1" Margin="34,47,32,49" Name="textBlockCheck" />

我已在MainPage.cs中在其构造函数中声明了datacontext:

this.DataContext= Global.Temp;

但是textBlock中没有显示任何内容。在此先感谢您的帮助。

5 个答案:

答案 0 :(得分:9)

您无法绑定到静态类,因为绑定需要对象实例。

但是,您可以绑定到类的静态属性 如果您将Global更改为不是静态但将其所有属性保留为静态,则可以使用以下技术。

假设:

namespace StaticBinding
{
    public class MyStaticClass
    {
        private static string myStaticProperty = "my static text";

        public static string MyStaticProperty
        {
            get { return myStaticProperty; }
            set { myStaticProperty = value; }
        }
    }
}

然后,如果您定义以下应用程序资源:

.. xmlns:myns="clr-namespace:StaticBinding"

<Application.Resources>
    <myns:MyStaticClass x:Key="MyStaticClassResource" />
</Application.Resources>

然后在您的页面中,您只需执行以下操作:

<TextBlock Text="{Binding Path=MyStaticProperty, 
                  Source={StaticResource MyStaticClassResource}}" />

这甚至可以让你在Path上进行智能感知。

这允许您绑定到“全局”静态变量,并使datacontext保持空闲,只包含您希望绑定的任何模型。

答案 1 :(得分:0)

我认为不支持绑定到静态属性

尝试使类单例并绑定到实例

这可能会有所帮助:

http://social.msdn.microsoft.com/Forums/en-IE/wpf/thread/257a41be-8168-401c-a915-cdc44e195a3f

答案 2 :(得分:0)

我想,那

this.Text = Global.Temp

答案 3 :(得分:0)

您可以使用:<TextBlock Text="{Binding Path=.}" /><TextBlock Text="{Binding}" />

答案 4 :(得分:0)

感谢大家的帮助,问题解决了。实际上你创建了一个简单的类L

public partial class App : Application
{


    //--------------My Class

    private static MyClass _class = null;

    public static MyClass _Class
    {
        get
        {              
            if (_class == null)
                _class = new MyClass();

            return _class;
        }
    }

并在要绑定的页面中,在.cs文件的类构造函数

中执行此操作
DataContext = App._Class;

最后在.xaml版本的文件中将此文件写入bind

<TextBlock Text="{Binding value}" Name="textBlockCheck" />

其中

  

Binding中的

实际上是MyClass类的属性。 :)

谢谢大家!