【问题标题】:C# WPF Open a window, but checkboxes are not setC# WPF 打开一个窗口,但未设置复选框
【发布时间】: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() 调用如何导致此异常。)

标签: c# wpf checkbox


【解决方案1】:

你设置了 DataContext 了吗?

public MyWindow(MyClass myClass){
InitializeComponent();
this.DataContext = myClass;
} 

在初始化组件()之前;你所有的 GUI - 元素都将为空!

如何从 MainWindow 中获取您的元素:

public MyClass GetData()
{
  MyClass data = this.DataContext as MyClass;
  return data;
}

并尝试:

IsChecked="{Binding Path=Versichertenstatuschecked}"

【讨论】:

  • 嗨,我在做其他事情之前初始化组件并设置上下文。
  • 您是否尝试过以下操作:IsChecked="{Binding Path=Versichertenstatuschecked}"
  • 是的,我做到了。最后还是一样。
【解决方案2】:

我想我知道问题出在哪里。你错过了绑定的Mode

IsChecked="{Binding Versichertenstatuschecked, Mode=TwoWay}"

使用这将触发视图模型中的更改以显示在视图中。

【讨论】:

  • 嗨,这并没有解决问题。我猜是因为我不使用 OnPropertyChanged,但我真的不知道为什么它会导致我出现对象引用问题:(
【解决方案3】:

我自己解决了这个问题。 在我使用我的类设置绑定属性之前,我只需要等到加载窗口。 我使用“加载”事件来调用类和jeah,不再有任何对象引用错误:)

这样的事情真是令人沮丧。

Cya

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多