我想知道如何为以下内容标记XAML。我有一个基于ICommand
的对象的视图模型。
我有一个带有文本框和按钮的表单。该按钮通过ICommand
与Command="{Binding MyButtonInViewModel}"
对象挂钩。
我想要做的是将按钮的CommandParameter
设置为等于文本框文本中的任何内容,例如调用“搜索”,但显然不知道如何挂钩视图中的控件
答案 0 :(得分:19)
以下XAML应该将TextBox作为参数传递给您的命令。
<TextBlock x:Name="searchBox" />
<Button Command="{Binding MyButtonInViewModel}"
CommandParameter="{Binding Text, ElementName=searchBox}"/>
答案 1 :(得分:5)
您可以通过在绑定中设置ElementName
来执行此操作。
这是一个例子:
<TextBox x:Name="textBox"/>
<Button Content="Button"
Command="{Binding ButtonCommand}"
CommandParameter="{Binding ElementName=textBox, Path=Text}"/>
答案 2 :(得分:2)
如果将文本框本身绑定到按钮的命令参数,而不仅仅是文本框的文本属性,则可以操作视图模型中的文本框,以清除文本属性。
<TextBox x:Name="searchBox" />
<Button Command="{Binding MyButtonInViewModel}"
CommandParameter="{Binding ElementName=searchBox}" />
查看型号代码
private void SearchStuff(TextBox searchBox)
{
//do stuff with searchBox.Text
searchBox.Text = "";
}
这个例子可能不太好,您可能希望搜索文本与搜索结果一起显示。更适合日志或消息应用,您希望在单击按钮时“消耗”文本。