如何在多个XAML文件中复用DataGridRowCopyAction类的RowCopyCommand命令?
解决XAML复用DataGridRowCopyCommand的问题
首先修正你的C#类代码,原代码存在语法错误且不符合XAML绑定要求:
方案一:使用静态属性(推荐全局复用)
将RowCopyCommand改为静态只读属性,无需实例化类即可直接在XAML中引用:
public class DataGridRowCopyAction { // 静态属性,全局可访问 public static ICommand RowCopyCommand { get; } = new DelegateCommand(RowCopyAction); // 对应静态方法,匹配DelegateCommand的委托签名 private static void RowCopyAction() { // 实现行复制逻辑 } }
然后在XAML中用x:Static标记绑定静态属性:
xmlns:b="clr-namespace:x.y" <!-- 绑定静态命令 --> Command="{x:Static b:DataGridRowCopyAction.RowCopyCommand}"
方案二:实例化类作为资源
如果需要保留实例成员(比如后续扩展实例级逻辑),可将类实例化为XAML资源,再绑定实例属性:
1. 修正C#类为实例属性
public class DataGridRowCopyAction { // 实例只读属性 public ICommand RowCopyCommand { get; } = new DelegateCommand(RowCopyAction); private void RowCopyAction() { // 实现行复制逻辑 } }
2. 在XAML中添加资源并绑定
xmlns:b="clr-namespace:x.y" <!-- 先在资源中实例化类 --> <Window.Resources> <b:DataGridRowCopyAction x:Key="RowCopyActionInstance"/> </Window.Resources> <!-- 绑定资源实例的命令属性 --> Command="{Binding RowCopyCommand, Source={StaticResource RowCopyActionInstance}}"
原代码失效的原因
RowCopyCommand是字段而非属性:XAML绑定仅支持绑定带get访问器的属性,不支持直接绑定字段。- 未正确指定绑定源:原XAML直接写
Binding path=b:RowCopyCommand,既没有指定静态成员的引用方式,也没有提供实例对象作为绑定源。
内容的提问来源于stack exchange,提问作者Anu Hardin
相关产品推荐
相关产品推荐

