Как связать в XAML статическое свойство? - PullRequest
1 голос
/ 01 октября 2011

Я пытаюсь привязать статическое свойство другого класса к свойству Text свойства TextBlock и могу заставить работать привязку, но при изменении значения статического свойства обновления свойства Text нет. Я прочитал, что я не могу использовать INotifyPropertyChanged, потому что свойство является статическим и видел ряд решений, которые предлагают использовать свойство зависимости. Я очень новичок в C # и не очень понимаю, как использовать Dependency Properties, но сделал пару попыток, которые, похоже, не работают по двум причинам. 1. У моего статического свойства есть пользовательский метод getter и setter и 2. Статическое свойство используется во многих статических методах, которые я не могу понять, как заставить работать, используя свойство зависимости. Я не знаю, как использовать пользовательский метод получения и установки при использовании свойства зависимости, или если это вообще можно сделать, или как продолжать использовать статическое свойство в статических методах после того, как я изменил его на свойство зависимости.

Вот текущий код статического свойства:

public class Helper
{
    public static string Token
    {
        get
        {
            using (StreamReader streamReader = new StreamReader("Token.ini"))
            {
                return streamReader.ReadLine();
            }
        }
        set
        {
            using (StreamWriter streamWriter = new StreamWriter("Token.ini"))
            {
                streamWriter.WriteLine(value);
            }
        }
    }

public static MethodThatUsesToken(){}
public static OtherMethodThatUsesToken(){}

А вот текущий XAML для привязки, которая работает, но не обновляется:

<Window.Resources>
<local:Helper x:Key="helper"/>
</Window.Resources>

<TextBlock Text="{Binding Source={StaticResource helper},Path=Token Converter={StaticResource NameConverter}}"/>

Я очень ценю любую помощь!

Ответы [ 3 ]

3 голосов
/ 01 октября 2011

В настоящее время это невозможно, но будет в .NET 4.5: см. Также "WPF 4.5 - часть 9: привязка к статическим свойствам"

В этой ветке SO опубликован обходной путь: Привязка к статическому свойству

1 голос
/ 02 октября 2011

В случае, если это поможет кому-то еще, я решил опубликовать свое окончательное решение, которое вполне подходит для моих целей.

Поскольку это оказывается невозможным без .NET 4.5, я в итоге изменил свойство и методы, чтобы они больше не были статическими, и изменил класс на одноэлементный, затем реализовал INotfiyPropertyChanged и изменил источник привязки XAML на x: Static вместо создание экземпляра в Window.Resources.

0 голосов
/ 01 октября 2011

Привязка к статическому свойству является проблемой (и недоступной в WPF) из-за уведомления об изменении (реализация INotifyPropertyChanged для статических свойств) Привязка к статическому свойству будет введена в WPF 4.5 (это можно проверить, установив .NET 4.5 Developer Preview). Подробнее об этом можно узнать здесь .

...