在同一视图中绑定命令和 CommandParameter

Binding a command and a CommandParameter in the same view

我有一个条目和一个按钮。我希望在按下按钮时调用命令 "CallWebServiceCommand"。对该命令的调用需要将 Web 服务的 url 作为 CommandParameter。 BindingContext 设置为页面的 ViewModel。

按钮的 CommandParameter 属性 需要引用条目的 Text 属性。在 WPF 中,我可以这样做:

<Button Text="Call web service" Command="{Binding CallWebServiceCommand}" CommandParameter="{Binding ElementName=url, Path=Text}" />

我知道每个视图不可能有多个绑定上下文,但是对于这种特殊情况,什么是好的解决方法?

这有点像 hack,但它在过去对我们有用: 使用 ViewModel 作为视图的 "relay"。为此,请在您的 ViewModel 上创建一个字符串 属性,文本字段将其文本 属性 绑定到该字符串,并将按钮的 CommandParameter 绑定到此 属性。如果您为此 "parameter" 属性 引发 PropertyChanged 事件,该命令会将更新后的值提供给指定为命令操作的方法。它当然不理想,但它确实可以作为 RelativeSource 绑定的穷人替代品。