観測可能なコレクションにデータを挿入すると、コレクション内の新しいデータを「設定」するときに「戻り値」が呼び出されないことがわかります。プログラムの別の場所からデータを設定すると機能しますので、動作する方法のニュアンスを理解していないといけません。動作する部分は、「This works」、「ChooseFile()」の下のコメント付きコードを取り出すときです。デバッガでは、OptionsToChooseに両方のケースでデータがあることがわかります。動作すると、XAMLが正しく更新されます。ObservableCollectionが設定された後に新しいデータを返さない
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;
}
}
}
次に、OptionsToを読み込み専用のプロパティを選択する、つまりセッターを削除する必要があります。 – Clemens
はい、すでに初期化されているプライベートフィールドを公開しているだけなので、それもそうです。 –
XAML側から任意の値を設定していないので、これは私にとってはうまくいくはずです。これはピックリストとしてもっと使われています。 – coolercargo