1

나는 다음과 같은 클래스를 가지고정적 메서드에서 PropertyChanged 이벤트를 트리거하는 방법은 무엇입니까?

LanguageBindingSource 클래스와 그 더미 방법의 유일한 목적은 부동산 알림 바인딩을 업데이트 할 수 있도록하는 것입니다이

Text="{Binding Dummy,Source={StaticResource languageSource},Converter={StaticResource languageConverter},ConverterParameter=labelColor}" 

같은 XAML의 요소에 바인딩

public class LanguagingBindingSource : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 

    public string Dummy 
    { 
    get { return String.Empty; } 
    set 
    { 
     PropertyChanged(this, new PropertyChangedEventArgs("Dummy")); 
    } 
    } 
} 

하나 이상의 자원이 변경 될 때 실제 바인딩 된 값은 변환기에서 제공되며 매개 변수로 전달 된 이름별로 리소스를 찾습니다. 자세한 배경은 this answer에 대한 의견을 참조하십시오.

내 문제는 바인딩이 포함 된 XAML 페이지 외부의 프로세스에 의해 리소스가 변경되고 모든 바인딩 인스턴스에 대해 속성 변경 알림을 트리거하도록 호출 할 수있는 단일 정적 메서드가 필요하다는 것입니다. 나는 내가 어떻게 할 수 있는지를 고민하고있다. 모든 아이디어를 가장 높이 평가할 것입니다. 다음과 같이

답변

1

은 클래스를 수정 : -

public class LanguagingBindingSource : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged = delegate {}; 

    public static void FirePropertyChanged(string key) 
    { 
    ((LanguagingBindingSource)Application.Resources[key]).NotifyPropertyChanged("Dummy"); 
    } 

    private void NotifyPropertyChanged(string name) 
    { 
    PropertyChanged(this, new PropertyChangedEventArgs(name); 
    } 

    public string Dummy 
    { 
    get { return String.Empty; } 
    set 
    { 
     NotifyPropertyChanged("Dummy")); 
    } 
    } 
} 

지금이 변화의 사용을 해고해야하는 점은 다음과 같습니다 - "languageBindingSource는"자원 키입니다

LanguagingBindingSource.FirePropertyChanged("languageBindingSource"); 

당신 바인딩 Source 속성에서도 사용하고 있습니다.

+0

이것은 작동하지 않습니다. 구문 오류가 발생했습니다. 비 정적 필드, 메서드 또는 속성 'System.Windows.Application.Resources.get'에는 개체 참조가 필요합니다. 또한 내가 잘못 이해하지 않는 한 FirePropertyChanged 메서드는 바인딩을 구현하는 뷰 내에서 호출되어야하며 리소스는 응용 프로그램의 리소스 사전에 있어야합니다. 자원 이름은 데이터베이스에서 자원을 찾는 외부 라이브러리에 제공되는 키입니다. –

+0

시나리오에 대해 좀 더 자세히 설명합니다. 내가 가지고있는 것은이 바인딩 메커니즘을 모두 사용할 많은 뷰 (사용자 컨트롤 등)로 구성된 애플리케이션입니다. 이러한 뷰 중 하나에는 버튼을 클릭하면 사용자가 하나 이상의 리소스에 대한 번역을 제공 할 수있는 번역 UI (응용 프로그램 범위 외부의 어셈블리에서 구현 됨)가 열립니다. 이 UI가 닫히면 (모든 사용자에게 알림) 모든보기에서 모든 바인딩을 새로 고치는 메커니즘을 사용해야합니다. –

+0

어떤 리소스가 변경되었는지 전혀 알지 못합니다. –

관련 문제