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