2012-01-14 4 views
6

런타임시 WPF 정적 리소스 값을 변경하려면 어떻게해야합니까?wpf 정적 리소스 값 변경

는 좀 textblocks 그때 나는 형식을 변경하려는 컨트롤에 바인딩 할 개체에 따라

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

을 참조하는 다음 리소스

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

있습니다. 다음과 같이 나는 컨트롤의 속성을 설정 한 :
public string LengthFormat 
{ 
    set 
    { 
     this.Resources["LengthFormat"] = value; 
    } 
} 
public string AreaFormat 
{ 
    set 
    { 
     this.Resources["AreaFormat"] = value; 
    } 
} 
public string InertiaFormat 
{ 
    set 
    { 
     this.Resources["InertiaFormat"] = value; 
    } 
} 

다음 바인딩 전에 각 문자열을 설정합니다.

하지만 작동하지 않는 사람이 누구나 제안합니까?

건배

답변

3

실제로는 잘 작동합니다. 그러나 리소스 키가 관찰되지 않기 때문에 UI가 업데이트되지 않습니다.

변경할 수있는 바인딩을 원하면 정적 리소스를 사용하지 마십시오. 속성에 INotifyPropertyChanged이라는 정규 바인딩을 사용하여 UI가 변경 사항을 관찰 할 수있게합니다.

0

정적 리소스가 관찰되지 않으므로 Claus에 동의합니다. UI는 변경되지 않습니다. 나는 동적 리소스에

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

다음과 같은 오류 메시지가 나타납니다. 오류 4 'Binding'유형의 'StringFormat'속성에서 'DynamicResourceExtension'을 설정할 수 없습니다. 'DynamicResourceExtension'은 DependencyObject의 DependencyProperty에서만 설정할 수 있습니다. –

+0

오오 그렇습니다. 이 경우 내 솔루션을 적용 할 수 없습니다. DependencyProperty에서만 작동합니다. –

3

가장 확실한 방법을 정적 리소스를 변경하여 시도를 제안하면가 무엇인지입니다 DynamicResource 사용으로 전환하는 것입니다.