当前位置:  开发笔记 > 编程语言 > 正文

通知静态类中静态属性的绑定

如何解决《通知静态类中静态属性的绑定》经验,为你挑选了1个好方法。

我在静态类中找到了静态属性的通知属性更改示例.但它不会更新TextBlock中的任何更改.这是代码.

第一个绑定在构造函数中使用"test"字符串,但StaticPropertyChanged始终为null.

public static class InteractionData
{
    public static List SelectedDirectories { get; set; }
    private static string errorMessage { get; set; }
    public static string ErrorMessgae
    {
        get { return errorMessage; }
        set
        {
            errorMessage = value;
            NotifyStaticPropertyChanged("errorMessage");
        }
    }

    static InteractionData()
    {
        SelectedDirectories = new List();
        errorMessage = "test";
    }

    public static event EventHandler StaticPropertyChanged;
    private static void NotifyStaticPropertyChanged(string propertyName)
    {
        if (StaticPropertyChanged != null)
            StaticPropertyChanged(null, new PropertyChangedEventArgs(propertyName));
    }
}

在视图中......

     xmlns:error ="clr-namespace:CopyBackup.Providers"

无论我在何处更改属性,TextBlock都不会更新.

欣赏



1> Clemens..:

与INotifyPropertyChanged的实现类似,静态属性更改通知仅在您触发StaticPropertyChanged事件时使用正确的属性名称时才有效.

使用属性名称,而不是支持字段的名称:

public static string ErrorMessgae
{
    get { return errorMessage; }
    set
    {
        errorMessage = value;
        NotifyStaticPropertyChanged("ErrorMessgae"); // not "errorMessage"
    }
}

你当然也应该修复拼写错误的属性名称:

public static string ErrorMessage
{
    get { return errorMessage; }
    set
    {
        errorMessage = value;
        NotifyStaticPropertyChanged("ErrorMessage");
    }
}

绑定应如下所示:

Text="{Binding Path=(error:InteractionData.ErrorMessage)}"

有关静态属性更改通知的详细信息,请参阅此博客文章


您还可以使用以下命令来避免编写属性名称CallerMemberNameAttribute:

using System.Runtime.CompilerServices;
...

public static event PropertyChangedEventHandler StaticPropertyChanged;

private static void NotifyStaticPropertyChanged(
    [CallerMemberName] string propertyName = null)
{
    StaticPropertyChanged?.Invoke(null, new PropertyChangedEventArgs(propertyName));
}

您现在可以在不显式指定属性名称的情况下调用该方法:

NotifyStaticPropertyChanged();


@ M.kazemAkhgary这不是必要的.请查看答案中链接的博客文章.
推荐阅读
kikokikolove
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有