【发布时间】:2014-07-10 15:46:06
【问题描述】:
我的复选框有问题。 我有一个 MainWindow(),从这里我打开我的第二个窗口为用户设置一些搜索属性。 (在他们想要搜索的领域中......比如姓名、名字和其他) 用户确认他的选择后,窗口关闭,值保存在 app.propertys 中。 在应用程序的下一次启动时,之前会话中的值仍然是它们应该的样子,所以这部分工作。
现在的问题: 如果我现在打开窗口,所有的复选框都不会像它们应该的那样设置?! 我将它们绑定到我的 ViewModel,如下所示:
<CheckBox x:Name="cVersichertenstatus" Content=... **IsChecked="{Binding Versichertenstatuschecked}"** .../>
我的绑定锁代码如下:
private bool versichertenstatusischecked;
public bool Versichertenstatuschecked
{
get
{
return versichertenstatusischecked;
}
set
{
if (Versichertenstatuschecked != value)
{
versichertenstatusischecked = value;
//this.OnPropertyChanged("Versichertenstatuschecked");
}
}
}
启动后,我将所有绑定属性设置为 app.propertys 的值。 但它什么也没改变。 Checkboxvalues 始终为 false :-(
我猜是因为我不使用 OnPropertyChanged,但如果我尝试我会收到此错误:
object reference not set to an instance of the object
我不明白,我有很多绑定并且一切正常,只有复选框没有。
谁能解释我必须做些什么来解决这个错误?
编辑:
Set the Datacontext :
public MainWindow()
{
InitializeComponent();
SetupBindings();
var l = new app_config_load();
l.load();
}
private void SetupBindings()
{
pViewModelList viewModel = new pViewModelList();
plistview.DataContext = viewModel;
}
和 load() 类:
public void load()
{
Properties.Settings get = new Properties.Settings();
pViewModelList a = new pViewModelList();
a.Nachnamechecked = get.cnachname_app;
a.Versichertenstatuschecked = get.cversichertenstatus_app;
a.Geburtsdatumchecked = get.cgeburtsdatum_app;
a.Versicherungsnrchecked = get.cversichertennummer_app;
a.Vornamechecked = get.cvorname_app;
get.Save();
}
我必须先以某种方式初始化属性吗?以为这是自动发生的?!
【问题讨论】:
-
你用什么将数据绑定到视图?棱镜? MVVM光?还是您刚刚实现了 OnPropertyChanged?
-
您使用了
OnPropertyChanged的哪个实现?如果您自己实现,请发布代码。 (并且:以防万一您通过从DependencyObject派生 ViewModel 类来使用DependencyObject.OnPropertyChanged(),那将是错误的。) -
嗨,我有一个提供 OnPropertyChange 的 ViewModelBase。它来自这边cocktailsandcode.de/2012/04/mvvm-tutorial-part-4-viewmodel。
-
如果您不调用
OnPropertyChanged,则不会将更改通知给 UI。所以,你必须在你的二传手中调用它。现在,为什么会出现该错误,因为我们需要知道如何分配DataContext,以及您何时以及何时初始化分配给DataContext的对象。还有一件事,如果DataContext中存在任何 Collection 或 List 对象,您必须专门创建一个新对象。 -
您究竟在哪里得到“对象引用未设置为对象的实例”异常?在注释掉的行中? (我之所以问是因为我看不出
OnPropertyChanged()调用如何导致此异常。)