2012-01-14 12 views
6

Jak zmienić wartość statycznego zasobu WPF w środowisku wykonawczym?Zmiana wartości statycznego zasobu wpf

mam następujące zasoby

<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> 

których niektóre TextBlocks odwoływać

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

następnie w zależności od obiektu, który ma być związany z kontrolą chciałbym zmienić formaty. mam skonfigurować właściwości w kontroli, co następuje:

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

następnie przed wiążące i ustawić każdy łańcuch.

Jednak to nie działa, każdy sugeruje whynot?

Pozdrowienia

Odpowiedz

3

Właściwie działa dobrze. Ale interfejs użytkownika nie jest aktualizowany, ponieważ klucze zasobów nie są obserwowane.

Nie powinieneś używać zasobów statycznych, jeśli chcesz powiązań, które mogą się zmienić. Zamiast tego użyj regularnych powiązań z INotifyPropertyChanged we właściwościach, pozwalając interfejsowi obserwować zmiany.

0

Zgadzam się z Clausem, ponieważ statyczny zasób nie będzie przestrzegany, twój interfejs użytkownika się nie zmieni. Proponuję spróbować zmieniając zasobów statycznych do dynamicznych zasobów

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

Pojawia się komunikat o błędzie: Błąd 4 Nie można ustawić właściwości 'DynamicResourceExtension' dla właściwości StringFormat typu "Binding". "DynamicResourceExtension" można ustawić tylko na DependencyProperty z DependencyObject. –

+0

ohh Dobrze, ma sens. Nie będziesz w stanie zastosować mojego rozwiązania w tym przypadku. Będzie działać tylko dla DependencyProperty –

3

Najbardziej oczywistym sposobem jest przejście do korzystania DynamicResource że to co to jest za.