【发布时间】:2018-06-11 10:51:18
【问题描述】:
我们使用以下机制/语法在 XAML 中绑定命令:
Command="{Binding CommandAggregator[FooCmd], Mode=OneTime}"
这里,CommandAggregator 是一个对象,您可以使用索引器(带有string 参数)来获取实际命令。
向聚合器注册的命令让我有些烦恼,因为我们仍在使用魔术字符串作为命令名称,如下所示:
this.CommandAggregator.SetCommand("FooCmd", new RelayCommand(execute, canExecute));
虽然我不一定喜欢这整个过程,但我无法改变太多。我现在想做的一件事是通过将魔术字符串设为常量或静态CommandName 类中的static readonly string 对象来退出使用魔术字符串。
但是是否可以在 XAML 中定义绑定并引用常量(比如CommandName.Foo)?想过用{x:Static ...},但是不知道怎么把返回值放到索引器中。
【问题讨论】:
-
可以绑定静态属性:stackoverflow.com/a/31611110/1136211
-
@Clemens 这看起来很有希望,但我无法让
Binding CommandAggregator[(common:CommandName.Foo)]工作;输出中也没有绑定错误。我现在将尝试提供整个路径。代码完成确实为我提供了common:CommandName部分,但没有提供任何属性或常量。 -
您不能在绑定属性路径中使用除文字(字符串或整数)键之外的任何其他内容。在您的 CommandAggregator 类中声明静态属性并绑定
Binding (local:CommandAggregator.FooCmd) -
@Clemens 啊,这就是原因!我将不得不检查我是否可以这样做(因为它是一个外部组件)。也许我在这里不走运。非常感谢您的建议,我确实学到了一些新东西!
标签: wpf xaml data-binding constants