Привязать текстовое поле к статическому свойству - PullRequest
0 голосов
/ 05 марта 2012

У меня есть статический класс со следующим статическим свойством:

 public static class PrintingMethods
{
 public static String DocsCountString
    {
        get
        {
            return printDocuments.Count.ToString();
        }
    }}

У меня есть текстовое поле, к которому я привязываю это свойство:

<TextBlock Text="{x:Static  my:PrintingMethods.DocsCountString}" x:Name="PagesNumber"/>

Это работает - я вижу число в тексте, но оно никогда не меняется, если значение свойства меняется.

Я новичок в этом, я знаю, что есть такие вещи, как Dependency Object и INotify Interface, но это не сработает для Static.

Если кто-нибудь может помочь мне с рабочим кодом (модификацией того, что я написал), чтобы добиться реального изменения текста в реальном времени, было бы здорово, спасибо !!!

Ответы [ 2 ]

2 голосов
/ 05 марта 2012

Ответ на наши комментарии: Если вы используете шаблон Singleton, вы можете привязать к нему вот так

public sealed class MySingleton : INotifyPropertyChanged
{
    public void RaiseProperty(string aPropName)
    {
        // implementation of INotifyPropertyChanged
    }

    public static MySingleton Instance 
    { 
        get{ return sInstance; } 
    }

    public string MyProperty
    {
        get {return mMyProperty;}
        set {mMyProperty = value; RaiseProperty("MyProperty"); }
    }

    private string mMyProperty;
    private static MySingleton sInstance = new MySingleton();
}

Как видите, вы можете легко использовать интерфейс и реализацию INotifyPropertyChanged с одноэлементным классом. Возможно, вы захотите сделать конструктор закрытым, чтобы запретить создание другого экземпляра этого класса. Также можно было бы лениво выделить экземпляр MySingleton. Вы найдете намного больше о синглетонах в stackoverflow.

<TextBlock Text="{Binding Source={x:Static  my:MySingleton.Instance}, Path=MyProperty}"/>

Важной частью здесь сейчас является Переплет и переопределение Source. Обычно Binding принимает текущий DataContext. При установке нового Source значение DataContext не имеет значения, а новый источник используется для получения значения, лежащего в основе свойства Path.

0 голосов
/ 14 марта 2013

Вы должны использовать функцию внутри модификатора, как:

Form2:

internal string foo()
{
    return nom;
}

Form1:

form2 win= new form2();
win.ShowDialog();
Textbox.Text = win.foo();
...