Как установить привязку к статическому свойству из-за кода? (WPF 4.5+) - PullRequest
0 голосов
/ 08 сентября 2018

В XAML установить привязку к статическому свойству просто ...

<TextBlock Text="{Binding Path=(foo:StaticClass.StaticProperty)}" />

Как добиться того же в коде?

Я пробовал следующее:

var b = new Binding(){
    Path = new PropertyPath(StaticClass.StaticProperty)
};

var b = new Binding(){
    Path = new PropertyPath("StaticClass.StaticProperty")
};

var b = new Binding(){
    Source = StaticClass,
    Path   = new PropertyPath("StaticProperty")
};

... но ничего из вышеперечисленного не работает.

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

var binding = new Binding(){
    Source = StaticClass.StaticProperty
};

Единственный способ, которым мне удалось заставить его работать до сих пор, - вот так ...

public static Binding CreateStaticBinding(Type classType, string propertyName){

    var xaml = $@"
        <Binding
            xmlns    = ""http://schemas.microsoft.com/winfx/2006/xaml/presentation""
            xmlns:is = ""clr-namespace:{$"{classType.Namespace};assembly={classType.Assembly.GetName().Name}"}""
            Path=""(is:{classType.Name}.{propertyName})"" />";

    return (Binding)System.Windows.Markup.XamlReader.Parse(xaml);
}

... но меня это раздражает, мне приходится прибегать к созданию динамического XAML, а затем анализировать его! UGH !! Но эй ... это работает.

Я должен думать, что есть более простой способ! Так что же это?

1 Ответ

0 голосов
/ 08 сентября 2018

Создание PropertyPath от xaml paserer отличается от конструктора Binding. Таким образом, вы должны использовать код ниже, чтобы заставить его работать.

var binding = new Binding() {
    Path = new PropertyPath(typeof(StaticClass).GetProperty(nameof(StaticClass.StaticProperty))),
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...