c# - ObservableCollection设置后不返回新数据

标签 c# wpf mvvm prism

当填充一个可观察的集合时,我可以看到在“设置”集合中的新数据时未调用“返回”。如果我从程序的其他位置设置数据,它确实可以工作,所以我一定不了解它的工作方式。起作用的部分是当我取出“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/

相关文章:

xamarin - Prism :在 ViewModel 中设置值后 View 没有更新?

wpf - 如何将 Ribbon 控件绑定(bind)到我的 ViewModel?

c# - Entity Framework 初始化最佳实践

C# Process.Start,如何防止重复使用现有应用程序?

c# - 如何隐式转换这个?

wpf - MahApps Metro 捕获关闭窗口事件

c# - Java 中 C# 的 System.Drawing.Bitmap 的等价物是什么

c# - 更改部分工具栏的背景

c# - 创建单实例 WPF 应用程序的正确方法是什么?

c# - 将 ListView 与对象绑定(bind)