我有一个 ListView 和一个按钮 AddNewItem 和两个表单都包含在两个堆栈面板中:< strong> spanel1 和 spanel2 当我从列表中选择一个项目时,spanel1会显示所选项目的数据 当我点击按钮时,spanel2的形式为空
在视图模型中我有两个属性:selectedItem和newItem 问题: 如果我以spanel2的形式填充新项目的数据并单击“保存”(请参阅保存命令代码),则不会更改NewItem属性
private void SaveItem(object obj)
{
if (this.selectedItem != null)
{
this.item.EditAsync(this.selectedItem );
}
else
{
this.ietm.InsertAsync(this.NewItem);
}
this.LoadData();
}
private Item newItem;
public Item NewItem
{
get
{
return this.newItem ?? new Item();
}
set
{
this.newItem = value;
this.RaisePropertyChanged("NewItem");
}
}
private Item selectedItem;
public Item SelectedItem
{
get
{
return this.selectedItem;
}
set
{
this.selectedItem= value;
this.RaisePropertyChanged("SelectedItem");
}
}
我做错了什么?
感谢。
答案 0 :(得分:1)
1)在XAML中创建一个新按钮
2)在UserVM类中创建一个新命令(称之为UpdateOrAddNew命令)并使用“Command”属性将其与按钮关联。
有关更多信息,请参阅此内容:如何将WPF按钮绑定到ViewModelBase中的命令?
3)在UpdateOrAddNew命令处理程序中,检查SelectedUser是否为null(然后创建新用户),或者如果它不为null,则更新现有用户。
要了解TextBox问题,您需要创建一个始终包含信息的包装器。
将此添加到您的UserVM:
public User UserRecord
{
get
{
if(userRecord == null)
return userRecord = new User();
}
set
{
userRecord = value;
onPropertyChanged("UserRecord");
}
}
现在你需要修改TextBoxes以绑定UserRecord而不是SelectedUser。
并修改您的SelectedUser:
public User SelectedUser
{
get { return selecteduser; }
set
{
selecteduser = value;
onPropertyChanged("SelectedUser");
UserRecord = selecteduser;
}
}