gpt4 book ai didi

c# - 使用按钮更改 ViewModel 属性

转载 作者:行者123 更新时间:2023-12-03 10:45:53 25 4
gpt4 key购买 nike

我正在学习 WPF 和 MVVM,到目前为止我很喜欢使用它。我将追求一种没有代码隐藏的纯粹主义风格。

我的软件很简单:我有一堆代表联系人的 POCO 对象。该 View 的左侧有一个包含所有联系人的列表框。通过在列表框中选择联系人,您可以在右侧看到详细信息,例如姓名。这完美地工作,列表框绑定(bind)到具有联系人列表的 View 模型,并且 View 模型还有一个名为 CurrentContact 的属性,详细信息 View 中的字段绑定(bind)到该属性。 (Listbox 的 SelectedItem 绑定(bind)到 CurrentContect 属性,因此当您在列表中选择联系人时它会自动更改)。

这就是问题所在:我想要一种添加新联系人的好方法,最好将“CurrentContact”设置为空,这会导致详细信息中的字段为空,然后我可以填写并按保存。我的第一个选择是在列表框的底部添加一个"new"项目,但事实证明这很难做到,因为列表框绑定(bind)到列表中没有这样一个空对象的 View 模型。相反,我在列表底部添加了一个按钮,将 CurrentContact 设置为 null。我需要这个按钮来更改我的 View 模型上的属性,但我想不出在这里使用绑定(bind)的方法。我在我的 View 模型中实现了一个命令,它将属性设置为空。这可行,但似乎是一种荒谬的解决方法,对于如此简单的事情来说,这是大量的样板代码。这真的是唯一干净的方法吗?

最佳答案

不幸的是,您几乎做对了。样板代码应该在那里。

您想使用 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
}

关于c# - 使用按钮更改 ViewModel 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26381600/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com