Хотя вы, безусловно, можете делать такие вещи, как 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, принял собственное решение, читая этот пост, и решил поделиться им.Надеюсь, кто-нибудь найдет это полезным.: -)