使用按钮更改ViewModel属性

时间:2014-10-15 11:37:36

标签: c# wpf mvvm

我正在学习WPF和MVVM,到目前为止我很享受使用它。我想要一种没有代码隐藏的纯粹风格。

我的软件很简单:我有一堆代表联系人的POCO对象。该视图左侧是所有联系人的列表框。通过在列表框中选择联系人,您可以看到右侧的详细信息,例如名称。这很有效,列表框绑定到一个viewmodel,它有一个联系人列表,viewmodel也有一个名为CurrentContact的属性,详细信息视图中的字段绑定到该属性。 (Listbox的SelectedItem绑定到CurrentContect属性,因此当您在列表中选择联系人时它会自动更改。)

问题在于:我想要一种添加新联系人的好方法,最好将“CurrentContact”设置为null,这会导致细节中的空字段,然后我可以填写并按保存。我的第一个选择是在列表框的底部添加一个“新”项,但由于列表框绑定到列表中没有这样的空对象的viewmodel,因此很难做到这一点。相反,我在列表底部添加了一个按钮,将CurrentContact设置为null。我需要这个按钮来更改我的viewmodel上的属性,但我想不出在这里使用绑定的方法。我在我的viewmodel中实现了一个Command,它将该属性设置为null。这可行,但似乎是解决它的一种荒谬的方式,这是一个非常简单的大量代码。它真的是唯一干净的方式吗?

1 个答案:

答案 0 :(得分:0)

不幸的是,你做得非常好。样板代码应该在那里。

您想使用ICommand将填充的对象添加到列表中。

public void InitializeCommands(){
    AddEContactCommand = new ICommandImpl(AddElement); //you'll have to derive an implementation for ICommand for this
}

public ICommand AddContactCommand
{
    get { return _addContactCommand; }
    set { SetValue(ref _addContactCommand, value); } //setvalue is wrapper for notifychanged from viewmodelbase abstract class
}
public void AddContact() {
     //do add contact
     //set properties null
}