属性更改事件始终为空

44

我有以下(缩写)的XAML代码:

<TextBlock Text="{Binding Path=statusMsg, UpdateSourceTrigger=PropertyChanged}"/>

我有一个单例类:

public class StatusMessage : INotifyPropertyChanged
{   
    private static StatusMessage instance = new StatusMessage();

    private StatusMessage() { }

    public static StatusMessage GetInstance()
    {
        return instance;
    }

    public event PropertyChangedEventHandler PropertyChanged;
    private void OnPropertyChanged(string status)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(status));
        }
    }

    private string statusMessage;
    public string statusMsg
    {
        get
        {
            return statusMessage;
        }
        set
        {
            statusMessage = value;
            OnPropertyChanged("statusMsg");
        }
    }
}

在我的主窗口构造函数中:

StatusMessage testMessage = StatusMessage.GetInstance();
testMessage.statusMsg = "This is a test msg";    

我无法使文本块显示测试信息。当我通过调试监视代码时,PropertyChanged 总是为 null。有什么想法吗?


22
你应该在哪里设置DataContext与一个StatusMessage实例相关联? - Jérôme Laban
12个回答

-1

我遇到了类似的问题,以上的解决方案都没有帮助到我。

我所需要做的就是使用内置的C# Propertychanged。

之前我已经实现了propertyChanged(不小心),但它指向了空值。


-3

如果您遵循所有的指示,验证您的属性名称是否正确,它是否被正确地分配了一个新值,您正在使用单例来保证您的视图模型只有一个实例,并且您已经成功地在UI中分配了您的DataContext - 确保无论是什么在强制更新您的属性之后都完成了可视树,例如将属性的刷新移动到按钮上,而不是窗口的Loaded事件。我之所以这样说,是因为我遇到了同样的问题,发现当我从我的Infragistics NetAdvantage功能区窗口的Loaded事件中刷新我的视图模型数据属性时,我的PropertyChanged事件总是为空。


这个答案语法很糟糕,也没有提供一个结构化的答案。你建议从视图加载中监视,这是复杂的,很可能会让他们更加困惑。如果这真的是你解决空 Prop 事件处理程序的方法,你应该提供方法而不是你自己做的例子。 - N_tro_P

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接