控件模板中的 WPF 命令 -> "CommandConverter cannot convert from > System.String."
WPF Commands in Control templates -> "CommandConverter cannot convert from > System.String."
我有一个来自 Telerik 的自定义控件模板,我已经在其中添加了一个(拆分)按钮。
如何将命令处理程序绑定到它?我试图在 public class 中添加 public 静态命令
使用像 x:static ns:Class.Command 和各种变体(如下所示)和大多数 SO-hits.
这样的绑定
<Button Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type telerik:RadSplitButton}}, Path=ShowSearchCommand}" Margin="2" />
和
<Button Content="Click me" Command="{x:Static vm:MainWindowViewModel.ShowSearchCommand}" CommandParameter="one"/>
它们都出现在错误消息中
NotSupportedException: CommandConverter cannot convert from
System.String.
我已经尝试在视图模型和 class pf 中定义命令(见下文)(我正在使用 Prism(因此是委托命令,但它不必是委托命令,只要它有效)
//public static RoutedUICommand ShowSearchCommand = new RoutedUICommand("ShowSearchCommand", "ShowSearchCommand", typeof(TabbedWindowCommands));
//public static DelegateCommand ShowSearchCommand = new DelegateCommand();
由于 ShowSearchCommand
不是 RadSplitButton
本身的 属性,而是其 DataContext
的 属性,您应该在绑定路径中包含 DataContext
:
<Button Command="{Binding RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type telerik:RadSplitButton}}, Path=DataContext.ShowSearchCommand}" Margin="2" />
您可能还想根据设置 DataContext
的位置和方式将 AncestorType
更改为 Window
。
另请注意,您只能绑定到 public 属性,这意味着 ShowSearchCommand
必须是 属性 而不是字段:
public DelegateCommand ShowSearchCommand { get; }
我有一个来自 Telerik 的自定义控件模板,我已经在其中添加了一个(拆分)按钮。 如何将命令处理程序绑定到它?我试图在 public class 中添加 public 静态命令 使用像 x:static ns:Class.Command 和各种变体(如下所示)和大多数 SO-hits.
这样的绑定<Button Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type telerik:RadSplitButton}}, Path=ShowSearchCommand}" Margin="2" />
和
<Button Content="Click me" Command="{x:Static vm:MainWindowViewModel.ShowSearchCommand}" CommandParameter="one"/>
它们都出现在错误消息中
NotSupportedException: CommandConverter cannot convert from System.String.
我已经尝试在视图模型和 class pf 中定义命令(见下文)(我正在使用 Prism(因此是委托命令,但它不必是委托命令,只要它有效)
//public static RoutedUICommand ShowSearchCommand = new RoutedUICommand("ShowSearchCommand", "ShowSearchCommand", typeof(TabbedWindowCommands));
//public static DelegateCommand ShowSearchCommand = new DelegateCommand();
由于 ShowSearchCommand
不是 RadSplitButton
本身的 属性,而是其 DataContext
的 属性,您应该在绑定路径中包含 DataContext
:
<Button Command="{Binding RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type telerik:RadSplitButton}}, Path=DataContext.ShowSearchCommand}" Margin="2" />
您可能还想根据设置 DataContext
的位置和方式将 AncestorType
更改为 Window
。
另请注意,您只能绑定到 public 属性,这意味着 ShowSearchCommand
必须是 属性 而不是字段:
public DelegateCommand ShowSearchCommand { get; }