当填充一个可观察的集合时,我可以看到在“设置”集合中的新数据时未调用“返回”。如果我从程序的其他位置设置数据,它确实可以工作,所以我一定不了解它的工作方式。起作用的部分是当我取出“This works”下的注释代码时,“ChooseFile()”则不起作用。在调试器中,我可以看到在两种情况下OptionsToChoose都有数据。在工作时,XAML会正确更新。
class ScripterViewModel : BindableBase
{
public ScripterViewModel()
{
ScripterModel scripterModel = new ScripterModel();
ObservableCollection<string> tabsChoice = new ObservableCollection<string>();
tabsChoice.Add("Tabs");
tabsChoice.Add("Buttons");
Tabs = tabsChoice;
this.OpenFileBtn = new DelegateCommand(chooseFile, canChooseFile).ObservesProperty(() => OpenFile);
this.SaveFileBtn = new DelegateCommand(saveFile, canSaveFile).ObservesProperty(() => SaveFile);
//This works
//var myJSONDoc = JsonConvert.DeserializeObject<JSONclass>(File.ReadAllText(@"C:\Users\mike\Documents\Haas\Scripter\settings.json"));
//OptionsToChoose = new ObservableCollection<Tabbed>(myJSONDoc.TabbedBtns);
}
public void chooseFile()
{
var myJSONDoc = JsonConvert.DeserializeObject<JSONclass>(File.ReadAllText(@"C:\Users\mike\Documents\Haas\Scripter\settings.json"));
OptionsToChoose = new ObservableCollection<Tabbed>(myJSONDoc.TabbedBtns);
}
public ObservableCollection<Tabbed> _optionsToChoose = new ObservableCollection<Tabbed>();
public ObservableCollection<Tabbed> OptionsToChoose
{
get
{
return _optionsToChoose;
}
set
{
_optionsToChoose = value;
}
}
}
最佳答案
在构造函数中创建OptionsToChoose时,将在 View 使用viewmodel时对其进行初始化。
在不起作用的示例中,您只是将ObservableCollection替换为新的ObservableCollection,而不是清除它并添加项目。因此,您需要通知该属性已更改,就像V.Leon在其答案中指出的那样。
或者只是清除现有集合,并使用json中的值填充它。
var myJSONDoc = JsonConvert.DeserializeObject<JSONclass>(File.ReadAllText(@"C:\Users\mike\Documents\Haas\Scripter\settings.json"));
OptionsToChoose.Clear();
foreach (var item in myJSONDoc.TabbedBtns)
{
OptionsToChoose.Add(item);
}
关于c# - ObservableCollection设置后不返回新数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43929505/