C# 从代码隐藏创建到Resources.resx中字符串的绑定

C# 从代码隐藏创建到Resources.resx中字符串的绑定,c#,wpf,data-binding,code-behind,resx,C#,Wpf,Data Binding,Code Behind,Resx,我首先在XAML中创建一个标签,其内容绑定到我的资源文件中的字符串。我已经实现了本地化,并确认当我更改语言时,标签的内容会相应更新 现在我需要从代码隐藏中执行同样的操作 以下是XAML的一种体验: 如果您在UI后面设置代码绑定,将不会收到通知,您应该创建自定义扩展并将WeakReference保存到dependencProperty并在区域性更改时更新值,我建议使用其他解决方案,请参阅本文。我不确定是否同意这一点。我的本地化实现与您链接到的实现非常相似。我通过ResourceProvider\

我首先在XAML中创建一个标签,其内容绑定到我的资源文件中的字符串。我已经实现了本地化,并确认当我更改语言时,标签的内容会相应更新

现在我需要从代码隐藏中执行同样的操作

以下是XAML的一种体验:



如果您在UI后面设置代码绑定,将不会收到通知,您应该创建自定义扩展并将
WeakReference
保存到
dependencProperty
并在区域性更改时更新值,我建议使用其他解决方案,请参阅本文。

我不确定是否同意这一点。我的本地化实现与您链接到的实现非常相似。我通过
ResourceProvider\u DataChanged
事件在区域性更改时更新属性和依赖属性。但是,似乎没有必要为资源字典中的键创建中间绑定。请尝试将绑定源设置为属性。不将资源设置为属性本身不起作用。“…资源是一种类型,在给定上下文中无效”。另外,在查看了您链接的解决方案的代码之后,我相信它也会有同样的问题。演示中没有任何内容是按程序创建的,它们都绑定到XAML中的静态资源。请尝试在应用程序资源中定义StaticResource
资源
,并将绑定源设置为Application.Current.FindResource()。你真是个天才!成功了!我已经用解决方案更新了我的答案。
Binding GUI_MachineTypeBinding = new Binding("GUI_MachineType");
GUI_MachineTypeBinding.Source = Application.Current.FindResource("Resources");
....
Label_MachineType.SetBinding(Label.ContentProperty, GUI_MachineTypeBinding);