资源更改时静态绑定不会更新
我首先想说我对Binding很新。我已经在WPF中做过一些事情,但我从未使用绑定因为概念对于我而言有点难以理解。 即便如此,我现在正在做的事情是我设法从一个我不完全理解的教程中挽救。
在我的应用程序中,我有一个带有静态属性的静态类,并且有一个静态方法可以更改这些静态属性。
例:
public static class AppStyle { public static SolidColorBrush property = Brushes.Red; public static void ChangeTheme() { property = Brushes.Blue; } }
在XAML内部,我有一个控件,它的背景绑定到这个值。 我甚至正确地声明了命名空间。
... xmlns:style="clr-namespace:CorrectNamespace;assembly=RightAssembly" ...
当应用程序加载时,它将加载正确的设置(红色)但是当事情发生变化并调用ChangeTheme()时,静态类将获得新值,但文本框的背景不会改变。 我在这做错了什么? 正如我所说的,我对此非常陌生,我很欣赏外行人的解决方案。
谢谢!
首先,您的property
实际上不是财产,而是一个领域。 最小的属性声明如下所示:
public static SolidColorBrush Property { get; set; }
请注意,名称以大写字母开头,这是C#中广泛接受的编码约定。
因为您还希望在属性值发生更改时触发更改通知,所以您需要声明属性更改事件(非静态属性通常通过实现INotifyPropertyChanged接口来完成)。
对于静态属性,WPF 4.5(或4.0?)中有一个新机制,您可以在其中编写静态属性更改事件和属性声明,如下所示:
public static class AppStyle { public static event PropertyChangedEventHandler StaticPropertyChanged; private static void OnStaticPropertyChanged(string propertyName) { var handler = StaticPropertyChanged; if (handler != null) { handler(null, new PropertyChangedEventArgs(propertyName)); } } private static SolidColorBrush property = Brushes.Red; // backing field public static SolidColorBrush Property { get { return property; } set { property = value; OnStaticPropertyChanged("Property"); } } public static void ChangeTheme() { Property = Brushes.Blue; } }
对静态属性的绑定将使用括号中的属性路径写入:
Background="{Binding Path=(style:AppStyle.Property)}"
要对更改实施反应,您需要通知有关更改。 请参见INotifyPropertyChanged接口。 但是,您不能将它与静态类一起使用。 单例(理想情况下使用一些dependency injection容器)而不是静态类呢?
上述就是C#学习教程:资源更改时静态绑定不会更新分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1039055.html