Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# -WPF模型视图ViewModel-ListBox的ItemSources在连接到数据库后可用_C#_Wpf_Xaml_Mvvm_Listbox - Fatal编程技术网

C# -WPF模型视图ViewModel-ListBox的ItemSources在连接到数据库后可用

C# -WPF模型视图ViewModel-ListBox的ItemSources在连接到数据库后可用,c#,wpf,xaml,mvvm,listbox,C#,Wpf,Xaml,Mvvm,Listbox,我有一个WPF应用程序,我想使用模型视图模型模式。因此,我创建了我的模型类、我的视图(XAML)和我的视图模型,作为它们之间的桥梁。ViewModel有一个ObservableCollection,用于填充列表框的内容。因此,在我的XAML中,我将ItemSources绑定到我列表的名称。 无论如何,我的方法fillMyDataStructure()仅在应用程序启动时调用 我的问题是,列表在应用程序启动时没有填写。用户单击“连接到数据库”按钮,仅当连接成功时,列表才会填充。但是我的列表框是空的,

我有一个
WPF应用程序
,我想使用
模型视图模型模式
。因此,我创建了我的
模型
类、我的
视图
XAML
)和我的视图模型,作为它们之间的桥梁。ViewModel有一个
ObservableCollection
,用于填充
列表框的内容。因此,在我的XAML中,我将
ItemSources
绑定到我列表的名称。 无论如何,我的方法fillMyDataStructure()仅在应用程序启动时调用


我的问题是,列表在应用程序启动时没有填写。用户单击“连接到数据库”按钮,仅当连接成功时,列表才会填充。但是我的列表框是空的,因为应用程序只在启动时尝试填充它,而列表中没有cource。那么,我如何解决这个问题,忠实于模型-视图-模型模式?提前谢谢。

您需要的是检测列表中的更改。您可能需要两种方法。一种是检测包含集合的属性何时发生更改(即,您将其设置为另一个集合实例)。另一种是当集合本身发生更改时(当您添加或删除项目时)。
第二个问题是使用ObservableCollection解决的。 对于第一个,您需要实现
INotifyPropertyChanged
接口,并为集合属性引发
PropertyChanged
事件。
您可以很容易地找到实现此接口的示例。

我想您忘记了实现INotifyPropertyChanged。如果替换整个ObservableCollection,则需要将ViewModel中的更改告知视图。看一看我想你忘了包括代码来重现你的问题:谢谢。我做到了。事实上,我执行“this.DataContext=new myViewModel()”,并且仅在myViewModel中填充列表,而不是在连接到数据库的后续时刻。也许正确的解决方案是创建一个事件connectedDB,在建立连接时引发它,并仅在DataContext中设置。你怎么看?我认为你应该编辑你的问题并添加代码的相关部分:)为了得到更精确的答案,我们需要更精确的问题(意思是代码)。