WPF:如果其属性发生变化,有没有办法强制转换器更新?

时间:2015-07-14 14:07:11

标签: c# wpf xaml inotifypropertychanged ivalueconverter

说明: 这是我在我的应用程序中使用的翻译器的一部分。当我用ComboBox更改语言时,我想更新其中的所有字符串。

问题: 当我的转换器属性发生变化时,我想更新标签内容。可能吗?如果我更改CurrentLanguage,这种方式(我如何制作)不会更新内容。

 <Label
      ID:Name="CompanyName"
      Content="{Binding ElementName=CompanyName, Path=Name, Converter={ID:Static Controller:Translator.Instance}}" />

此ComboBox更改我的当前值 - 工作

 <ComboBox
        SelectedItem="{Binding Path=CurrentLanguage, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay, Converter={StaticResource FlagConverter}}">

背后的翻译代码 - 有效(PropertyChanged被解雇)

    public partial class Translator : IValueConverter, INotifyPropertyChanged
    { 
    ...
        private String m_currentLanguage;
        public String CurrentLanguage
        {
            get { return m_currentLanguage; }
            set
            {
                m_currentLanguage = value;
                OnPropertyChanged("CurrentLanguage");
            }
        }

        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            return Get((String)value); // nonrelevant function - works
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            return GetOriginal((String)value); // nonrelevant function - works
        }

        #region Events
        public event PropertyChangedEventHandler PropertyChanged;

        protected virtual void OnPropertyChanged(string propertyName)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
        }
        #endregion
    }

1 个答案:

答案 0 :(得分:2)

我看到了两种可能的解决方案:

  • 使用多值转换器并绑定到Name AND CurrentLanguage
  • 更像是一个hack:将一个eventtrigger添加到comboxbox.itemchanged并使用Company.Name重置Company.Name的值(setter被调用 - &gt;转换器被调用)