我在C#中使用JSON.NET。在我的代码中,Json String会定期解析为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
的{{1}}。
我希望每次都会执行dataObj
,达到行DataObj_PropertyChanged()
,但事实并非如此。
我怎么能解决这个问题?还有其他选择吗?
谢谢。
答案 0 :(得分:1)
如果您希望在为{{1}分配新值时能够引发dataObj
,则INotifyPropertyChanged
的所有者需要实施PropertyChanged
}。
我假设dataObj
是某个类的字段或属性。它必须是该类的属性。
但也许你不需要提出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
的旧值不会引发任何事件。为什么会这样?怎么可能呢?
答案 1 :(得分:1)
永远不会引发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
的新实例。