관찰 가능 컬렉션을 채울 때 컬렉션의 새 데이터를 "설정할"때 "반환"이 호출되지 않고 있음을 알 수 있습니다. 프로그램의 다른 위치에서 데이터를 설정하면 작동합니다. 따라서 작동 방식의 미묘한 차이를 이해해야합니다. 작동하는 부분은 "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
예, 이미 초기화 된 private 필드를 노출하고 있기 때문에. –
XAML 측에서 any 값을 설정하지 않아서 고맙습니다. 이것은 선택 목록으로 더 많이 사용되고 있습니다. – coolercargo