C# 如何将组合框绑定到WPF中的多语言值集合?
我正在尝试设置一个多语言应用程序,因此当用户更改显示语言时,所有打开窗口中的所有文本都会自动更改。 我在绑定组合框控件时遇到问题。绑定需要在代码隐藏中完成,因为我有来自数据库的动态内容,有时甚至需要在运行时创建额外的组合框。 此外,我不希望将翻译保留在数据库中,因为我不希望每次用户更改显示语言时都查询数据库。 我到现在为止所做的: 在C# 如何将组合框绑定到WPF中的多语言值集合?,c#,wpf,binding,combobox,multilingual,C#,Wpf,Binding,Combobox,Multilingual,我正在尝试设置一个多语言应用程序,因此当用户更改显示语言时,所有打开窗口中的所有文本都会自动更改。 我在绑定组合框控件时遇到问题。绑定需要在代码隐藏中完成,因为我有来自数据库的动态内容,有时甚至需要在运行时创建额外的组合框。 此外,我不希望将翻译保留在数据库中,因为我不希望每次用户更改显示语言时都查询数据库。 我到现在为止所做的: 在xaml中: <ComboBox x:Name="cmb"/> 这里我被卡住了,我不知道如何确定组合框来刷新显示的文本。该方法必须实现,如果打开多个窗
xaml
中:
<ComboBox x:Name="cmb"/>
这里我被卡住了,我不知道如何确定组合框来刷新显示的文本。该方法必须实现,如果打开多个窗口,每个窗口都包含随机数目的组合框,则当我更改当前语言时,所有窗口中的所有组合框都将刷新显示的列表,而不会影响其中的其他值(如所选项)。有人知道怎么做吗
非常感谢。对于您的xaml UI,INotifyPropertyChanged界面指示viewmodel的更新。您可以这样扩展您的类:
public class MyCmbItem : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void NotifyPropertyChanged(string APropertyName)
{
var property_changed = PropertyChanged;
if (property_changed != null)
{
property_changed(this, new PropertyChangedEventArgs(APropertyName));
}
}
private string _Text;
private string _KeyText;
public int Index { get; set; }
public string Text
{
get { return _Text;}
set {
if (_Text != value)
{
_Text = value;
NotifyPropertyChanged("Text");
}
}
}
public MyCmbItem(string key_text, int index)
{
Index = index;
_KeyText = key_text;
RefreshText();
_res_man_global.LanguageChanged += () => RefreshText();
}
public void RefreshText()
{
Text = _res_man_global.GetString(_KeyText, _culture);
}
}
您的视图可以简单地绑定到文本属性,如下所示:
<DataTemplate DataType="{x:Type local:MyCmbItem}">
<TextBlock Text="{Binding Path=Text}"/>
</DataTemplate>
注意:我假设您的语言类是全局的,并且具有某种语言更改通知事件。在应用程序运行时处理语言更改是否至关重要?改变语言通常是极为罕见的事情,那么开发处理这种边缘情况的功能是否值得?相反,您是否可以通过提示用户关闭并重新启动应用程序来响应语言更改?非常好,谢谢!顺便说一句,我还添加了~MyCmbItem(){{u res_man_global.LanguageChanged-=(发送方,args)=>RefreshText();}我不确定这是否真的有必要。。。
<DataTemplate DataType="{x:Type local:MyCmbItem}">
<TextBlock Text="{Binding Path=Text}"/>
</DataTemplate>