Wpf 对象引用未设置为ViewModelLocator Mvvm灯光中对象的实例

Wpf 对象引用未设置为ViewModelLocator Mvvm灯光中对象的实例,wpf,mvvm,light,Wpf,Mvvm,Light,我的应用程序中有多个ViewModel,我正在ViewModelLocator mvvm light中绑定/使用它们。我已经完成了DailyActivities.xaml页面上的按钮。但当我点击它时,它在ViewModelLocator中给了我一个错误,比如“对象引用未设置为对象的实例”。控制权就在这一行: 公共静态活动() { _activities.Cleanup();//此处出错 _活动=空; } 以下是ViewModelLocator中DailyActivitiesViewModel的代

我的应用程序中有多个ViewModel,我正在ViewModelLocator mvvm light中绑定/使用它们。我已经完成了DailyActivities.xaml页面上的按钮。但当我点击它时,它在ViewModelLocator中给了我一个错误,比如“对象引用未设置为对象的实例”。控制权就在这一行:

公共静态活动() { _activities.Cleanup();//此处出错 _活动=空; }

以下是ViewModelLocator中DailyActivitiesViewModel的代码:

私有静态活动ViewModel\u活动

          public static ActivitiesViewModel ActivitiesStatic
    {
        get
        {
            if (_activities == null)
            {
                CreateActivities();
            }

            return _activities;
        }
    }

    /// <summary>
    /// Gets the ViewModelPropertyName property.
    /// </summary>
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance",
        "CA1822:MarkMembersAsStatic",
        Justification = "This non-static member is needed for data binding purposes.")]
    public ActivitiesViewModel Activities
    {
        get
        {
            return ActivitiesStatic;
        }
    }

    /// <summary>
    /// Provides a deterministic way to delete the ViewModelPropertyName property.
    /// </summary>
    public static void ClearActivities()
    {
        _activities.Cleanup(); --Error here
        _activities = null;
    }

    /// <summary>
    /// Provides a deterministic way to create the ViewModelPropertyName property.
    /// </summary>
    public static void CreateActivities()
    {
        if (_activities == null)
        {
            _activities = new ActivitiesViewModel();
        }
    }
公共静态活动视图模型活动静态
{
得到
{
如果(_activities==null)
{
创建活动();
}
返回活动;
}
}
/// 
///获取ViewModelPropertyName属性。
/// 
[System.Diagnostics.CodeAnalysis.SuppressMessage(“Microsoft.Performance”,
“CA1822:MarkMembersAstatic”,
justion=“此非静态成员用于数据绑定目的。”)]
公共活动视图模型活动
{
得到
{
返回活动静态;
}
}
/// 
///提供删除ViewModelPropertyName属性的确定方法。
/// 
公共静态活动()
{
_activities.Cleanup();--此处出错
_活动=空;
}
/// 
///提供创建ViewModelPropertyName属性的确定方法。
/// 
公共静态活动()
{
如果(_activities==null)
{
_活动=新活动视图模型();
}
}
好心的建议


谢谢

您需要先确定该字段是否存在,然后才能使用它:如果该字段的活动已为空,则无需进行清理

为什么不做类似的事情呢

public static void ClearActivites()
{
    if (null == _activities) return;
    _activities.Cleanup();
    _activities = null;
}

@伊纳尔。以上这些对我帮助很大。但现在我有一个对话框,其中一个窗口上有“确定”和“取消”按钮。当我从另一个窗口来到这个窗口,如果我点击这个按钮,它会要求点击OK或Cancel。当我点击cancel时,窗口会关闭,但如果我再次重复这个过程并想取消窗口,我必须点击cancel按钮两次,再点击一次n表示三次四次n以此类推。好心的建议?ThanksHow是否检查此对话框的空值?请建议?@Tarun:在评论中分享你的问题代码。否则,请考虑问一个新问题。现在可以使用Messenger.Reset()完成此操作。Thanks@Tarun:如果此答案对您有帮助,您可以将其标记为答案。