绑定文本更改事件以防止无效输入WPF XAML

时间:2018-03-29 01:39:28

标签: c# wpf xaml model-view-controller

我目前正在尝试阻止用户将数字以外的任何内容输入文本框。

我目前有一个带有textchange事件的文本框,它调用了一个relay命令。但是我无法通过relay命令影响文本框。

我已经尝试过直接设置textbox.text并且没有用,也没有尝试返回字符串。

这是我的代码

XAML

<TextBox x:Name="TextBox"  Margin="5,5,0,0" Grid.Column="1" Grid.Row="3"  HorizontalAlignment="Left" Width="31"  ">
                    <i:Interaction.Triggers>
                        <i:EventTrigger EventName="TextChanged">
                            <command:EventToCommand Command="{Binding TextBoxTextChanged,Mode=TwoWay}"
                                                    CommandParameter="{Binding Path=Text, ElementName=TextBox}" />
                        </i:EventTrigger>
                    </i:Interaction.Triggers>
                </TextBox>

查看模型

DaysBackTextChanged = new RelayCommand<string>(daysBackText =>
        {
            Func<string> function = () => 
            {
                if (!Regex.IsMatch(daysBackText, "[^0-9]+"))
                {
                    //return TextBox.Text;
                    return "X";

                }
                else
                {
                    return "Y";

                }
            };

        });

1 个答案:

答案 0 :(得分:0)

修改您的XAML,在PreviewTextInput

中添加TextBox个事件
 PreviewTextInput="NumbersOnly"

现在,让我们使用正则表达式,是吗?

 using System.Text.RegularExpressions;

 private void NumbersOnly(object sender,  TextCompositionEventArgs e)
{
Regex regex = new Regex("[^0-9]+");
e.Handled = regex.IsMatch(e.Text);
}  

这里e.Handeled是为了防止输入数字而不是输入数字。

希望这有效:)