我可以将剪贴板作为命令参数发送吗?

时间:2015-05-11 20:48:21

标签: c# wpf xaml binding clipboard

使用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中绑定什么?

编辑:到目前为止,解决方法是将按钮连接到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);
        }
    }

1 个答案:

答案 0 :(得分: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();
    }
}