在同一视图中绑定命令和 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 绑定的穷人替代品。
我有一个条目和一个按钮。我希望在按下按钮时调用命令 "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 绑定的穷人替代品。