为什么jobject.parse()未调用属性汇总



我在c#中使用json.net。在我的代码中,JSON字符串定期解析为JObject dataObj。每次更改dataObj时,我都希望将新的显示在UI中的文本框中。这就是为什么我想到此代码:

    internal void DisplayData()
    {
        dataObj.PropertyChanged += DataObj_PropertyChanged;
    }
    private async void DataObj_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
    {
        await dataBox.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, 
                              delegate { dataBox.Text = writeString; });
    }

writestring是转换为stringdataObj

我希望每次执行DataObj_PropertyChanged(),达到线dataObj = JObject.Parse(jsonString);,但不是。

我该如何解决?有其他选择吗?

谢谢。

dataObj所有者如果您想在为dataObj分配新值时能够提高PropertyChanged,则需要实现INotifyPropertyChanged

我假设dataObj是某些类的字段或属性。它需要是该课程的属性。

,但也许您不需要提高PropertyChanged。如果您要做的就是在更改DataObj的值时拥有自己的班级调用方法,只需在属性设置器中执行此操作即可。

private JObject _dataObj;
public JObject DataObj {
    get { return _dataObj; }
    set {
        if (_dataObj != value) {
            _dataObj = value;
            OnDataObjChanged();
            //  Maybe you don't really need this, I can't say. 
            //OnPropertyChanged(nameof(DataObj));
        }
    }
}
protected async void OnDataObjChanged()
{
    await 
        dataBox.Dispatcher.RunAsync(
            Windows.UI.Core.CoreDispatcherPriority.Normal, 
            delegate { _dataBox.Text = writeString; }
        );
}

如果您只替换dataObj的值,则dataObj的旧值不会引发任何事件。为什么会呢?怎么可能?

从未提出DataObj_PropertyChanged的原因是因为您没有将该方法附加到上。

您的代码看起来像

JObject dataObj;
// Create a new JObject instance from a jsonString
dataObj = JObject.Parse( jsonString );
dataObj.PropertyChanged += DataObj_PropertyChanged;
// Create a new JObject instance from a jsonString
dataObj = JObject.Parse( jsonString );

DataObj_PropertyChanged如果您更改实例上的属性,则将调用。但是您创建一个新实例而没有附件的DataObj_PropertyChanged

最新更新