C# XAML绑定允许按实例访问静态成员?

C# XAML绑定允许按实例访问静态成员?,c#,wpf,xaml,C#,Wpf,Xaml,WPF/Silverlight应用程序有一种常见的本地化技术,它在.resx生成的文件周围包含一个viewmodel包装器。所有绑定都引用此包装器的同一实例的属性,因此此属性上的单个NotifyPropertyChanged会自动刷新整个UI 例如,这是Locale类: public class Locale: ViewModelBase { public LocalizedStrings Strings {get;} = new LocalizedStrings(); publ

WPF/Silverlight应用程序有一种常见的本地化技术,它在
.resx
生成的文件周围包含一个viewmodel包装器。所有绑定都引用此包装器的同一实例的属性,因此此属性上的单个
NotifyPropertyChanged
会自动刷新整个UI

例如,这是
Locale
类:

public class Locale: ViewModelBase
{
    public LocalizedStrings Strings {get;} = new LocalizedStrings();
    public UpdateLocale()
    {
        NotifyPropertyChanged(nameof(Strings));
    }
}
这就是约束力:

<Application.Resources>
    <ns:Locale x:Key="Locale" />
</Application.Resources>

<TextBlock Text="{Binding Source={StaticResource Locale}, Path=Strings.MyString1" />

.resx编译器生成的本地化字符串的所有字段都是静态的

这意味着您不能在C#code中使用
new Locale().Strings.MyString1
,而应该使用
LocalizedStrings.MyString1
,但在绑定中它却出人意料地工作


问题是,为什么?这是正确的方法还是有更好的方法?

好吧,绑定不是“新的”,而是与现有的关联……所以为什么不呢。@GCamel问题是,你不能在C中的
LocalizedString
实例上访问
MyString1
——你需要类型名称本身。这里的
new
操作符只是获取此实例的一个示例。ho,,我不知道LocalizedStrings中有什么,但看起来像是动力学…很正常的“问题是,为什么?”仅仅因为WPF设计师已经这样构建了它。绑定使用反射,它只查找非静态和静态属性。@GCamel否,
dynamic
也不允许通过实例访问静态字段