我在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
是转换为string
的dataObj
。
我希望每次执行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
。