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>