使用 mvvm 复制克隆

Copy Clone with mvvm

我需要在作业中创建一个带有 2 个按钮的 wpf 应用程序。其中一个按钮是“复制”,另一个是“克隆”。当我按下复制按钮时,它应该复制屏幕上文本框中的信息并创建一个新的文本框并将其写入其中。当我们按下克隆按钮时,它应该以相同的方式复制信息并将其写入新的文本框中,但是这次如果我尝试更改克隆文本框中的值,它应该更改克隆文本框中的所有值。有谁知道我可以学习克隆部分的例子吗?

好的,我很感兴趣所以我想尝试一下并自己制作一个示例程序。 我不能给你我的代码只是复制,但这里有一些对我有用的基本结构:

查看:

  • 以文本框作为项目模板的列表框。 ItemSource 绑定到 ViewModel 中的一个 ObservableCollection<StringModel> StringList,我稍后会讲到。 SelectedItem 绑定到 ViewModel
  • 中的单个 StringModel SelectedString 实例
  • 克隆按钮
  • 复制按钮
  • 在后面的代码中(或任何你想要的地方)只需将你的 ViewModel 设置为数据上下文并触发 ViewModel 中的相应函数,以防按下按钮(下一点)

字符串模型 这很简单,一个围绕字符串的包装器 class,以便 A) 作为引用传递和 B) 实现 INotifyPropertyChanged。注意第二个构造函数接受一个字符串作为参数。

public class StringModel : ViewModelBase
{
    private string stringValue;

    public string StringValue
    {
        get { return stringValue; }
        set { SetProperty<string>(ref stringValue, value); }
    }


    public StringModel(){ }

    public StringModel(string value)
    {
        StringValue = value;
    }
}

ViewModel 这个 class 简单地保存了上面提到的 Collection 以及当前选择的项目的 属性 。另外我们还有两个对应按钮的函数:

public void AddCopy()
{
    if (SelectedString == null)
        return;

    StringList.Add(new StringModel(SelectedString.StringValue));
}

public void AddClone()
{
    if (SelectedString == null)
        return;
    StringList.Add(SelectedString);
}

如您所见,由于您的 StringModel 现在是一个单独的 class,您可以通过引用传递它,或者在复制的情况下,只需使用字符串内容创建一个新的。

显然还有一些额外的检查要做(提示:ObservableCollection 的空指针异常,ViewModel 属性的 INotifyPropertyChanged 实现),但这应该让您开始。有问题就问吧。