我对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
类添加方法RemoveAddress
,PersonViewModel
等...以使用AddressViewModel
AddressViewModel
的实例添加到我的Addresses
可观察集合以上两点看起来都有些混乱 - 是否有更好的处理集合的方法?
答案 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。除非您的模型中没有显示逻辑,否则不需要另一个地址视图模型。