Данные, связывающие строковую переменную статического класса с textBlock в Phone 7? - PullRequest
3 голосов
/ 16 марта 2011

Вот код C #

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

    public static string temp="100";

}

, а вот код xaml MainPage

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

Я объявил datacontext в MainPage.cs следующим образом в своем конструкторе:

this.DataContext= Global.Temp;

Но там ничего не отображается в текстовом блоке.Заранее спасибо за помощь.

Ответы [ 5 ]

9 голосов
/ 16 марта 2011

Невозможно выполнить привязку к статическому классу, поскольку для привязки требуется экземпляр объекта.

Однако вы можете привязать статические свойства класса.
Вы можете использовать следующую технику, если вы изменили 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}}" />

Это даже даст вам intellisense на Path.

Это позволяет вам связываться с «глобальными» статическими переменными и при этом оставлять текст данных свободным, чтобы просто содержать любую модель, с которой вы хотите связать.

0 голосов
/ 16 марта 2011

Спасибо всем за помощь, проблема решена. На самом деле вы создаете простой класс 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-версии вашего файла, напишите это для привязки

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

, где

значение

в Binding является собственностью класса MyClass. :)

Спасибо всем!

0 голосов
/ 16 марта 2011

Я думаю, что

this.Text = Global.Temp

0 голосов
/ 16 марта 2011

Вы можете использовать: <TextBlock Text="{Binding Path=.}" /> или <TextBlock Text="{Binding}" />

0 голосов
/ 16 марта 2011

Я думаю, что не поддерживается привязка к статическому свойству

Попробуй сделать класс синглтоном и привязать к экземпляру

это может помочь:

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

...