2011-10-01 7 views
1

다른 클래스의 정적 속성을 TextBlock의 Text 속성에 바인딩하려고하는데 바인딩이 작동하도록 만들 수 있지만 정적 속성 값이 변경되면 텍스트 속성이 업데이트되지 않습니다. INotifyPropertyChanged 속성은 정적이며 Dependency Property를 사용하도록 제안하는 여러 가지 솔루션을 보았 기 때문에 사용할 수 없다는 것을 읽었습니다. 나는 C#에 익숙하지 않고 의존성 프로퍼티를 사용하는 방법을 정말로 이해하지 못한다. 그러나 두 가지 이유로 작동하지 않는 몇 가지 시도를했다. 1. 내 정적 속성에는 사용자 정의 getter 및 setter가 있고 2. 정적 속성은 종속성 속성을 사용하여 작업하는 방법을 파악할 수없는 여러 가지 정적 메서드에서 사용됩니다. 종속성 속성을 사용할 때 사용자 정의 getter 및 setter를 사용하는 방법 또는이를 수행 할 수 있는지 또는 종속성 속성을 변경 한 후에 정적 메서드에서 정적 속성을 계속 사용하는 방법을 알지 못합니다.XAML에서 정적 속성에 바인딩하는 방법?

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}}"/> 

난 정말 어떤 도움을 주셔서 감사합니다

다음은 정적 속성의 현재 코드입니다!

+0

정적으로 만드는 이유는 무엇입니까? 토큰 리더/라이터를 본격적인 클래스로 구축하고, 뷰 모델 ('string Token' 속성을 통해)에 인스턴스를 노출하면 어떨까요? 그렇다면 다른 토큰 파일을 가지고 있다면이 코드를 재사용 할 수있는 편리한 방법이 있습니다. –

답변

3

이 현재 불가능하지만 .NET 4.5에있을 것입니다 : 또한이 SO 스레드에 게시 된 해결 방법은 "WPF 4.5 – Part 9 : binding to static properties"

참조 : Binding to static property

+0

적어도 뭔가 쉽게 고민하지 않는 것이 좋습니다. 제공 한 해결 방법은 도움을 요청하기 전에 구현하려고 시도했지만 getter 및 setter에서 작동 시키거나 정적 메서드에서 속성을 사용하는 방법을 찾아 내지 못했습니다. – Menase

0

정적 속성에 바인딩 문제 (그리고 사용할 수 없습니다 WPF에서) 변경 알림 (정적 속성에 대해 INotifyPropertyChanged 구현)을 사용합니다. 정적 속성에 대한 바인딩은 WPF 4.5에 도입되었습니다 (.NET 4.5 Developer Preview를 설치하여 확인할 수 있습니다). 자세한 내용은 here을 참조하십시오.

1

다른 사람에게 도움이되는 경우, 제 목적을 위해 잘 작동하는 최종 솔루션을 게시하겠다고 생각했습니다.

.NET 4.5가 없으면 속성과 메서드가 더 이상 정적이 아닌 것으로 변경되어 클래스가 싱글 톤으로 변경된 다음 INotfiyPropertyChanged가 구현되고 XAML 바인딩 소스가 x : Static으로 변경되었습니다. Window.Resources에서 인스턴스를 만드는 방법.

관련 문제