C# 来自其他对象的wpf命令参数

C# 来自其他对象的wpf命令参数,c#,wpf,data-binding,icommand,C#,Wpf,Data Binding,Icommand,我想知道如何为以下内容标记XAML。我有一个视图模型,其对象基于ICommand 我有一个带有文本框和按钮的表单。该按钮通过命令=“{Binding MyButtonViewModel}”连接到ICommand对象 我想做的是将按钮的CommandParameter设置为文本框文本中的任何内容,以便调用“搜索”,但显然不知道如何在视图中钩住控件。以下XAML应该可以将文本作为参数从文本框传递到命令 <TextBlock x:Name="searchBox" /> <Butto

我想知道如何为以下内容标记XAML。我有一个视图模型,其对象基于
ICommand

我有一个带有文本框和按钮的表单。该按钮通过
命令=“{Binding MyButtonViewModel}”
连接到
ICommand
对象


我想做的是将按钮的
CommandParameter
设置为文本框文本中的任何内容,以便调用“搜索”,但显然不知道如何在视图中钩住控件。

以下XAML应该可以将文本作为参数从文本框传递到命令

<TextBlock x:Name="searchBox" />

<Button Command="{Binding MyButtonInViewModel}" 
        CommandParameter="{Binding Text, ElementName=searchBox}"/>

您可以通过在绑定中设置
ElementName
来完成此操作。 下面是一个例子:

<TextBox x:Name="textBox"/>
<Button Content="Button" 
        Command="{Binding ButtonCommand}" 
        CommandParameter="{Binding ElementName=textBox, Path=Text}"/>

如果将文本框本身绑定到按钮的命令参数,而不仅仅是文本框的文本属性,则可以在视图模型中操纵文本框,例如清除文本属性

<TextBox x:Name="searchBox" />

<Button Command="{Binding MyButtonInViewModel}"
        CommandParameter="{Binding ElementName=searchBox}" />

对于这个示例来说可能不是很好,因为您可能希望搜索文本与搜索结果一起显示。如果您希望在单击按钮时“消费”文本,则最好使用日志或消息应用程序。

我感谢您的回答,但请查看答案。。。如果有任何问题带有复选标记,则表示问题已解决。这几乎是一年前的事了,我已经远远超出了这个范围。@DRapp:SO的答案不仅适用于提出问题的人,也可能对社区的其他人有用。从VM使用UI是否是一个好主意是另一个问题。谢谢,Jehof。我想我也做了同样的事情。我的印象是这样做后,我应该能够在我的ViewModel中的MyButtonViewModel函数中访问searchBox名称。但我没有。你知道为什么吗?(我正在尝试传递图表名称,而不是文本框)
private void SearchStuff(TextBox searchBox)
{
    //do stuff with searchBox.Text
    searchBox.Text = "";
}