操纵集合& ViewModel模式

时间:2010-06-02 09:58:17

标签: c# wpf collections viewmodel

我对WPF比较陌生,而我遇到的问题我很确定是一个相对简单的问题。

我有我的基础数据对象,一个人:

class Person
{
    public string Surname {get; set; }
    public string Firstname {get; set; }
    public List<Address> Addresses {get; }
}

我希望在我的WPF应用程序中显示和编辑此对象。为此,我创建了一个我在xaml中绑定的ViewModel:

class PersonViewModel
{
    public string Fullname {get; }
    public ObservableCollection<AddressViewModel> Addresses {get; }
}

这很好,除了操纵我的地址集合,我无法解决我应该做的事情:

  • 我应该向我的AddAddress类添加方法RemoveAddressPersonViewModel等...以使用AddressViewModel
  • 的实例操作我的集合
  • 我应该只将AddressViewModel的实例添加到我的Addresses可观察集合

以上两点看起来都有些混乱 - 是否有更好的处理集合的方法?

1 个答案:

答案 0 :(得分:2)

我建议在ViewModel中添加命令。 例如,您将拥有AddAddressCommand和RemoveAddressCommand。您可以将这些命令绑定到View(例如,您可以将按钮绑定到AddAddressCommand),该按钮将在ViewModel中执行将添加到集合的方法。

        public ObservableCollection<AddressViewModel> Addresses { get; set; }

    public RelayCommand AddAddressCommand
    {
        get
        {
            if (_addAddressCommand == null)
            {
                _addAddressCommand = new RelayCommand(p => this.AddAddress_Execute());
            }
            return _addAddressCommand;
        }
    }

    private void AddAddress_Execute()
    {
        Addresses.Add(new AddressViewModel());
    }

(在上面的示例中,我使用的是RelayCommand,这是一个实现ICommand的自定义类,您可以在此RelayCommand here上阅读更多内容

另外还有一个注意事项:我不会创建一个AddressViewModel我只需要一个实现INotifyPropertyChanged的AddressModel。除非您的模型中没有显示逻辑,否则不需要另一个地址视图模型。