using System; using System.ComponentModel; using System.Windows; namespace TranslationByMarkupExtension { public class TranslationData : IWeakEventListener, INotifyPropertyChanged { #region Private Members private readonly string _key; #endregion /// /// Initializes a new instance of the class. /// /// The key. public TranslationData( string key) { _key = key; LanguageChangedEventManager.AddListener(TranslationManager.Instance, this); } /// /// Releases unmanaged resources and performs other cleanup operations before the /// is reclaimed by garbage collection. /// ~TranslationData() { LanguageChangedEventManager.RemoveListener(TranslationManager.Instance, this); } public object Value => TranslationManager.Instance.Translate(_key); #region IWeakEventListener Members public bool ReceiveWeakEvent(Type managerType, object sender, EventArgs e) { if (managerType == typeof(LanguageChangedEventManager)) { OnLanguageChanged(sender, e); return true; } return false; } private void OnLanguageChanged(object sender, EventArgs e) { PropertyChanged?.Invoke( this, new PropertyChangedEventArgs("Value")); } #endregion #region INotifyPropertyChanged Members public event PropertyChangedEventHandler PropertyChanged; #endregion } }