将新项添加到ListView

时间:2016-10-14 08:58:27

标签: c# wpf mvvm

我有一个 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");

                }
            }
我做错了什么? 感谢。

1 个答案:

答案 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;
    }
}