从Blend中的类创建示例数据会抛出“对象引用未设置为对象的实例”

时间:2011-02-14 11:26:30

标签: c# viewmodel expression-blend mvvm-light mvvm

我正在尝试从Expression Blend中的ViewModel类创建一些示例数据。 但Expression Blend会停止并说“对象引用未设置为对象的实例”。就个人而言,我不明白这个例外的来源。

有没有人知道为什么会这样?

这是我的UsersListViewModel:

[Export]
public class UserListViewModel : ViewModelBase
{
    [ImportingConstructor]
    public UserListViewModel(IUserListView view)
        : base(view)
    {

    }

    private ObservableCollection<UserItem> _userList;

    public ObservableCollection<UserItem> UserList
    {
        get { return _userList; }
        set
        {
            if (_userList != value)
            {
                _userList = value;
                RaisePropertyChanged("UserList");
            }
        }
    }

    private UserItem _selectedUser;

    public UserItem SelectedUser
    {
        get { return _selectedUser; }
        set
        {
            if (_selectedUser != value)
            {
                _selectedUser = value;
                RaisePropertyChanged("SelectedUser");
            }
        }
    }

    private string _searchText;

    public string SearchText
    {
        get { return _searchText; }
        set
        {
            if (_searchText != value)
            {
                _searchText = value;
                RaisePropertyChanged("SearchText");
            }
        }
    }

    private ICommand _searchCommand;

    public ICommand SearchCommand
    {
        get { return _searchCommand; }
        set
        {
            if (_searchCommand != value)
                _searchCommand = value;
        }
    }

    // ... other ICommands
}

提前感谢你的帮助,

干杯, -G。

2 个答案:

答案 0 :(得分:2)

UPDATE! Laurent(MvvmLight作者)发布了如何调试设计时数据。 Blog post here.

我在Blend中或在Visual Studio中打开.xaml时找到了此错误的原因和解决方法。

  

对象引用未设置为对象的实例。

Blend尝试运行你的设计时代码,如果在某处遇到一个空指针,这就是你得到的错误。

因此,跟踪代码创建设计时数据。很可能你忘记初始化某些东西或者你的错误类型。

如果你可以在设计师运行用户代码时捕获断点,这很容易找到,但我认为这不可行。

答案 1 :(得分:1)

遇到此问题时,我发现我的属性上的属性会导致此错误消息。

在创建示例数据时注释[ImportingConstructor][Export](使用Blend编译项目一次以确保不使用旧版本)可能会在这里做到这一点。