【发布时间】:2015-10-03 05:34:57
【问题描述】:
简介: 这是我在应用程序中使用的翻译器的一部分。当我使用 ComboBox 更改语言时,我想更新其中的所有字符串。
问题: 当我的 Converters 属性发生更改时,我想更新标签内容。可能吗?如果我更改 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
}
【问题讨论】:
-
这很奇怪。您甚至没有将转换器用作转换器。您正在将元素绑定到自身?
-
@Sinatr 我会看看他们两个,谢谢 :) 这样但是没有内存泄漏 =)
-
@Blam 是的,我是,它工作得非常好,我只是设置了一个转换器来使用它的名称,然后我将它翻译成一个字符串,它可以在我的翻译 .XML 中找到,名称充当字典的键:)
-
但是它不起作用,它对我来说仍然很奇怪。 meta.stackexchange.com/questions/66377/what-is-the-xy-problem
-
@Blam 我会尝试 MultiValueConverter 并会报告,这听起来很有希望 =)
标签: c# wpf xaml inotifypropertychanged ivalueconverter