2015-05-11 1 views
4

Использование MVVM У меня есть ViewModel, который реализует команды. Я хотел бы получить содержимое буфера обмена в качестве параметра и делать с ним что-то.Можно ли отправить буфер обмена в качестве параметра команды?

XAML:

<Button Command="{Binding Path=ClipBoardAction}" 
      CommandParameter="{Binding SomeAwesomeCodeHereToPassCurrentClipboard}" /> 

C#:

private void ClipBoardAction(object parameter) { 
    //parameter is clipboard OR CLIPBOARD DATA like string[] 
} 

Возможно ли это? Если да, то что мне привязать в XAML?

EDIT: Работать до сих пор - просто подключить кнопку к событию Click и вставить код за клеем.

private void Button_Click(object sender, RoutedEventArgs e) { 
     //manually send command to object 
     string[] clipboard = Clipboard.GetText().Split(new Char[] { '\n' }); 
     var but = sender as Button; 
     var viewModel = (FooViewModel)but.DataContext; 
     if (viewModel.ClipBoardAction.CanExecute(null)){ 
      viewModel.ClipBoardAction.Execute(clipboard); 
     } 
    } 
+0

'Clipboard' статический класс в' системе. Пространство имен Windows (PresentationCore). Если вы включите эту ссылку, вы можете просто использовать 'Clipboard.WhateverFunction' в команде, не нужно передавать ей параметры. https://msdn.microsoft.com/en-us/library/system.windows.clipboard%28v=vs.110%29.aspx –

+0

Не могли бы вы уточнить? Я не могу найти буфер обмена в системе, возможно, я неправильно создаю ресурс. – markokstate

+1

'System.Windows.Clipboard.GetText()' вам не нужно передавать его через параметр, вы можете просто вызвать это внутри своего 'ClipboardAction' –

ответ

1

Поскольку Clipboard класса предоставляет данные из буфера обмена, как методы не свойство, и связывание может быть сделано только с свойствами, нет, вы не можете сделать это.

Редактировать

Вы можете взломать эту проблему путем реализации пользовательских converter, но я не думаю, что это очень достойно:

public class ClipboardConverter : IValueConverter { 
    public object Convert(object value, Type targetType, object parameter, 
        System.Globalization.CultureInfo culture) { 
     return Clipboard.GetData(value as string); 
    } 
    public object ConvertBack(object value, Type targetType, object parameter, 
        System.Globalization.CultureInfo culture) { 
     throw new NotImplementedException(); 
    } 
} 
Смежные вопросы