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

时间:2017-07-24 10:53:34

标签: c# wpf xaml

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编译器生成的LocalizedStrings的所有字段都是静态的。

这意味着您无法在C#代码中执行new Locale().Strings.MyString1,而应使用LocalizedStrings.MyString1代替,但在绑定中它会令人惊讶地工作。

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

0 个答案:

没有答案