C# 绑定到静态类属性

C# 绑定到静态类属性,c#,wpf,binding,textblock,C#,Wpf,Binding,Textblock,我想将textblock文本绑定到静态类的属性。每当静态类的属性值更改时,它应该反映到另一个窗口或自定义控件上的textblock。您可以使用标记扩展绑定到静态类上的任何属性,但如果您不实现任何更改跟踪,则可能会导致刷新错误 <TextBlock Text="{Binding Source={x:Static sys:Environment.MachineName}}" /> 这对我很有效: Text="{Binding Source={x:Static MyNamespace:M

我想将textblock文本绑定到静态类的属性。每当静态类的属性值更改时,它应该反映到另一个窗口或自定义控件上的textblock。

您可以使用标记扩展绑定到静态类上的任何属性,但如果您不实现任何更改跟踪,则可能会导致刷新错误

<TextBlock Text="{Binding Source={x:Static sys:Environment.MachineName}}" />

这对我很有效:

Text="{Binding Source={x:Static MyNamespace:MyStaticClass.MyProperty}, Mode=OneWay}"

如果没有
Mode=OneWay
,我得到了一个例外。

适用于那些使用嵌套静态类来组织/分离常量的人。如果需要绑定到嵌套的静态类中,似乎需要使用加号(+)运算符而不是点(.)运算符来访问嵌套类:

{Binding Source={x:Static namespace:StaticClass+NestedStaticClasses.StaticVar}}
例如:

public static class StaticClass
    {
        public static class NestedStaticClasses
        {
            public static readonly int StaticVar= 0;

        }
    }
这对我有用

当您有一个静态类,它的静态属性如下

 namespace App.Classes
 {
     public static class AppData
     {
         private static ConfigModel _configModel;
         public static ConfigModel Configuration
         {
            get { return _configModel; }
            set { _configModel = value; }
         }
     }

     public class ConfigModel : INotifyPropertyChanged
     {
         public event PropertyChangedEventHandler PropertyChanged;

          private bool _text = true;
          public bool Text
          {
               get { return _text ; }
               set { 
                     _text = value; 
                     PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Text"));
               }
          }
      }
}
您可以像这样将其绑定到xaml

xmlns:c="clr-namespace:App.Classes"

<TextBlock Text="{Binding Path=Text, Source={x:Static c:AppData.Configuration}}"/>
xmlns:c=“clr命名空间:App.Classes”

也就是说,属性设置程序需要引发PropertyChanged事件,就像任何绑定属性一样,才能正确刷新;assembly=mscorlib”添加到标记中,以使代码snipplet工作,否则名称空间“sys””“不是吗defined@AlexPaven:调用PropertyChanged事件时,作为
发送方
参数发送什么?空?通常用于静态属性?当然,我想空值是合适的;看,这个方法在技术上对我有效,但有一个奇怪的错误。当我使用这样的代码片段时,它会说我的静态类不是名称空间的一部分(它是名称空间的一部分),而名称空间在设计器上为我提供了
xaml
一个“无效标记”屏幕。奇怪的是,当我运行程序时,它不会出错。不仅如此,显示错误的代码段工作正常。知道是什么原因造成的吗?@ARidder101不知道。很抱歉我已经有一段时间没处理这件事了。但它可能只是智能意义上的一些错误。这对我帮助很大,谢谢!官方文件的链接在哪里?