【问题标题】:Can I send Clipboard in as Command Parameter?我可以将剪贴板作为命令参数发送吗?
【发布时间】:2015-05-11 20:48:21
【问题描述】:

使用 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);
        }
    }

【问题讨论】:

  • ClipboardSystem.Windows 命名空间 (PresentationCore) 中的静态类。如果你包含这个引用,你可以在命令中使用Clipboard.WhateverFunction,不需要传递参数给它。 msdn.microsoft.com/en-us/library/…
  • 您能说得更具体些吗?我在系统中找不到剪贴板,可能是我创建的资源不正确。
  • System.Windows.Clipboard.GetText() 你不必通过参数传递它,你可以在你的ClipboardAction 中调用它
  • @markokstate 您在代码隐藏中引用它,在您的情况下是 ClipboardAction 命令。请参阅我提供的链接。
  • 我想我的目标是用 ViewModel 处理它并避免后面的代码。

标签: c# wpf xaml binding clipboard


【解决方案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();
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    • 2015-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多