检查对象是否为空

时间:2013-12-13 16:43:27

标签: c# wpf silverlight mvvm

假设我有一个名为Customer的类(由Entity Framework自动生成)

CustomerID // Primary Key & Auto-increment
Name
Gender
City

现在在我的ViewModel中:

public Class myViewModel : INotifyPropertyChanged
{
    public Customer CurrentCustomer
    {
        get
        {
            return MainViewModel.cCustomer;
        }
        set
        {
            myViewModel.cCustomer = value;
            OnPropertyChanged("CurrentCustomer");
        }
    }

    ....
    ....
    ....

}

这是我的MainViewModel

public Class MainViewModel : INotifyPropertyChanged
{
    public MainViewModel()
    {
       cCustomer = new Customer();
    }

    public static Customer cCustomer { get; set; }

    public void SaveChanges()
    {
        //Here I want to check if all the fields of cCustomer are empty
        //And depending on that I want to save the cCustomer.
    }

    ....
    ....
    ....

}

我试图通过将它们与null进行比较来检查cCustomer的所有字段,但是我得到一个错误,指出对象引用没有设置为对象的实例。

简而言之,我想在保存客户时检查cCustomer是否为空。

3 个答案:

答案 0 :(得分:1)

您的MainViewModel类将cCustomer属性声明为static,但您在类构造函数中设置该属性:

public Class MainViewModel : INotifyPropertyChanged
{
    public MainViewModel()
    {
       cCustomer = new Customer();
    }

    public static Customer cCustomer { get; set; }

因此,当您尝试在这些行中静态访问cCustomer属性时,可能无法填充它:

get
{
    // Unless you've created an instance of a MainViewModel already,
    // this property will be null
    return MainViewModel.cCustomer;
}
set
{
    myViewModel.cCustomer = value;
    OnPropertyChanged("CurrentCustomer");
}

您真的希望cCustomer属性是静态的吗?此外,在实例构造函数中的类上设置静态属性可能是一种不好的做法,应该避免使用。

答案 1 :(得分:0)

您的cCustomer可能是null(对于属性集没有验证) - 很容易检查:

if (cCustomer == null)
{
    // No Customer record, so don't even think about checking properties on it.
    // feel free to throw an exception if it's not valid to save without one...
}

答案 2 :(得分:0)

不要那样做......应该是数据模型的一部分。如果您的要求是不应该有null个值,那么请在类属性级别执行此操作:

public string Text
{
    get { return text; }
    set { if (value != null) { text = value; NotifyPropertyChanged("Text"); } }
}