Ручка копирования и вставки (буфер обмена) в MVVM - PullRequest
3 голосов
/ 14 октября 2010

Если я хочу получить доступ к буферу обмена с MVVM, как я могу это сделать?

Ответы [ 2 ]

3 голосов
/ 30 августа 2016

Хотя вы, безусловно, можете делать такие вещи, как Clipboard.SetText и Clipboard.GetText в своей виртуальной машине, если вы являетесь пуристом MVVM (как и я), то я бы порекомендовал создать ClipboardService (с соответствующим интерфейсом, чтобы вы могли его издеватьсяв юнит-тестах).Что-то вроде следующего:

using System.Windows;

public class ClipboardService : IClipboardService
{
    public void SetText(string value)
    {
        Clipboard.SetText(value);
    }

    public string GetText()
    {
        return Clipboard.GetText();
    }
}

Затем вы можете ссылаться на него как на свойство вашей виртуальной машины, например, так:

public IClipboardService ClipboardService { get; set; }

И либо установить его непосредственно как свойство, либо включить его в свой.Конструктор:

public FooViewModel(IClipboardService service) {
    ClipboardService = service;
}

И когда вам это нужно, вместо непосредственного вызова Clipboard.SetText, вы можете использовать ClipboardService.SetText.И вы можете (как упоминалось ранее) издеваться над ним в модульных тестах.Итак, если вы используете Moq (как я), вы можете получить что-то вроде:

Mock<IClipboardService> clipMock = new Mock<IClipboardService>();
clipMock.Setup(mock => mock.GetText(It.IsAny<string>())).Returns("Foo");

И создать свою виртуальную машину следующим образом:

var fooVm = new FooViewModel(clipMock.Object);

И так далее.

Я понимаю, что это древний пост, но я искал несколько лучших советов по работе с буфером обмена и MVVM, принял собственное решение, читая этот пост, и решил поделиться им.Надеюсь, кто-нибудь найдет это полезным.: -)

1 голос
/ 14 октября 2010

SL 4 теперь поддерживает операции с буфером обмена текста.Это прозрачно в режиме OOB и требует подтверждения пользователя, если не в режиме OOB.

Вы можете использовать Clipboard.GetText() в моделях представления и командах для получения текстового содержимого, доступного в буфере обмена.

...