Изменить значение статического ресурса wpf - PullRequest
6 голосов
/ 14 января 2012

Как я могу изменить значение статического ресурса WPF во время выполнения?

У меня есть следующие ресурсы

<UserControl.Resources>
    <sys:String x:Key="LengthFormat">#.# mm</sys:String>
    <sys:String x:Key="AreaFormat">#.# mm²</sys:String>
    <sys:String x:Key="InertiaFormat">#.# mm⁴</sys:String>
</UserControl.Resources>

, на которые ссылаются некоторые текстовые блоки

<TextBlock Grid.Row="2" Grid.Column="1" 
 Text="{Binding Path=Breadth, StringFormat={StaticResource ResourceKey=LengthFormat}}" />

затем в зависимости от объекта, который будет привязан к элементу управления, я хотел бы изменить форматы.Я установил свойства в элементе управления следующим образом:

public string LengthFormat
{
    set
    {
        this.Resources["LengthFormat"] = value;
    }
}
public string AreaFormat
{
    set
    {
        this.Resources["AreaFormat"] = value;
    }
}
public string InertiaFormat
{
    set
    {
        this.Resources["InertiaFormat"] = value;
    }
}

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

Однако это не работает, кто-нибудь предлагает whynot?

Приветствия

Ответы [ 3 ]

3 голосов
/ 14 января 2012

Самый очевидный способ - перейти на использование DynamicResource, для чего оно и нужно.

3 голосов
/ 14 января 2012

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

Не следует использовать статические ресурсы, если вы хотите привязки, которые могут измениться.Вместо этого используйте обычные привязки с INotifyPropertyChanged в свойствах, позволяя пользовательскому интерфейсу наблюдать изменения.

0 голосов
/ 14 января 2012

Я согласен с Клаусом, так как статический ресурс не будет наблюдаться, ваш интерфейс не изменится. Я бы предложил попробовать изменить статический ресурс на динамический

<TextBlock Grid.Row="2" Grid.Column="1" Text="{Binding Path=Breadth, StringFormat={DynamicResource ResourceKey=LengthFormat}}" />
...