2010-10-14 3 views

ответ

0

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

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

+0

Я действительно спрашиваю в приложении MVVM, где должна идти логика буфера обмена. Является ли доступ к Clipboard из моего ViewModel хорошей идеей? –

+0

Вы имеете в виду «в отличие от этого в коде XAML позади»? Если это так, я считаю, что ответ отрицательный. Для меня кажется законным, что модель представления знает буфер обмена. –

1

В то время как вы, конечно, можете делать такие вещи, как и 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"); 

И создать экземпляр VM, как так:

var fooVm = new FooViewModel(clipMock.Object); 

И так далее.

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