文本框中的 WPF 命令参数

Posted

技术标签:

【中文标题】文本框中的 WPF 命令参数【英文标题】:WPF CommandParameter in Textbox 【发布时间】:2010-11-04 06:01:41 【问题描述】:

我正在使用 MVVM 模式,并且我在父窗口中有一个文本框,并希望将一些文本发送到将出现在 Textchanged 上的弹出窗口。

我尝试使用命令参数,但它不适合我。

请帮忙..

谢谢 沙拉特

【问题讨论】:

【参考方案1】:

你试过什么?这段代码对我有用:

<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <Window.CommandBindings>
        <CommandBinding Command="Cut" Executed="CommandBinding_Executed" />
    </Window.CommandBindings>
    <StackPanel>
        <TextBox x:Name="textBox1" />
        <Button Command="Cut" 
                CommandParameter="Binding Text,ElementName=textBox1" 
                Content="Cut" />
    </StackPanel>
</Window>

使用此事件处理程序:

private void CommandBinding_Executed(object sender, ExecutedRoutedEventArgs e)

    MessageBox.Show(e.Parameter.ToString());

【讨论】:

我想使用文本框 textchanged 或当用户从键盘单击输入文本框时。不想按按钮。 如果您使用的是命令,那么您必须像按钮一样使用 ICommandSource。命令与事件处理程序不同。【参考方案2】:

如果我希望在用户按下回车时执行命令,我喜欢使用它。注意 IsDefault 绑定的巧妙使用 :-)

<TextBox x:Name="inputBox"/>
<Button Command="Binding CutCommand" 
        CommandParameter="Binding Text, ElementName=inputBox" 
        Content="Cut" 
        IsDefault="Binding IsFocused, ElementName=inputBox" />

如果您不希望按钮可见,当然可以将其可见性设置为折叠状态。我认为如果你按回车它仍然会执行命令。

【讨论】:

非常感谢..如果按钮折叠它不会执行。我将宽度设置为 0 :-) 我可以对列表框做同样的事情吗?我的意思是当我双击列表框项目时。按钮点击甚至应该被提升。 我不知道。为此,我在代码隐藏中手动调用了该命令。不过,我对 xaml 还是很陌生,所以谁知道呢。 我认为将按钮的可见性设置为隐藏(而不是折叠)就可以了。 @Botz3000 你才是真正的MVP【参考方案3】:

此代码适用于我

<UserControl x:Class="Test"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             mc:Ignorable="d" 
             Height="Auto" Width="Auto">
  <UserControl.InputBindings>
    <KeyBinding Key="Enter" Command="Binding ScanCommand" CommandParameter="Binding Text, ElementName=tbBarcode"/>
  </UserControl.InputBindings>
  <Grid Name="LayoutRoot">
    <TextBox x:Name="tbBarcode" Height="23"/>
  </Grid>
</UserControl>

【讨论】:

以上是关于文本框中的 WPF 命令参数的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 MvvmCross 在 WPF 应用程序中获取命令行参数?

如何在 WPF C# 中获取多文本框作为方法的输入参数

WPF 命令和参数

WPF命令行参数,一种聪明的方法?

从命令提示符使用自定义命令参数运行 WPF 应用程序

传递给命令 WPF 的多个参数 [重复]