如何清除点击按钮上的文本框

How to clear textbox on click button

我有一个文本框,我在其中处理它的文本已更改 event.Now 当我单击按钮时我想清除文本框中的文本。

现在,当我在文本框中输入文本时,当我调用我的命令时,文本不会被清除。

xaml

   <TextBox   Text="{Binding SearchText,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}" Name="mytxtBox">
        <TextBox.InputBindings>
            <KeyBinding Command="{Binding Path=SearchCommand}" CommandParameter="{Binding ElementName=mytxtBox, Path=Text}" Key="Enter"/>
        </TextBox.InputBindings>
    </TextBox>

ViewModel

   public string SearchText
    {

        get
        {
            return TypedText;
        }
        set
        {
             TypedText=value;
                if (string.IsNullOrEmpty(TypedText.ToString()))// This is called when the text is empty
                {
                    Some Logic//
                }             
            SetProperty(ref TypedText, value);   
        }
    }


    private void MyCommandExecuted(string text)
    {
        SearchText= string.Empty;
    }

I have a textbox in which I am handling its text changed event

不,你没有,或者至少在你的问题中显示的代码摘录中没有:

<TextBox Text="{Binding SearchText, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" Name="mytxtBox">
    <TextBox.InputBindings>
        <KeyBinding Command="{Binding Path=SearchCommand}" CommandParameter="{Binding ElementName=mytxtBox, Path=Text}" Key="Enter"/>
    </TextBox.InputBindings>
</TextBox>

在此示例中,您将字符串 属性 数据绑定到 TextBox.Text 属性,这与 处理其文本的方式类似,但不相同更改事件.

无论哪种方式,为了清除此数据绑定值,您只需将数据绑定字符串 属性 设置为空字符串(从 setter 中删除无关代码后):

public string SearchText
{
    get { return TypedText; }
    set { TypedText = value; SetProperty(ref TypedText, value); } 
}

...

private void MyCommandExecuted(string text)
{
    SearchText = string.Empty;
}

您似乎不了解您使用的框架

public string SearchText
{
    set 
    { 
         TypedText = value; 
         SetProperty(ref TypedText, value); 
    } 
}

这两行代码should/could永远不会在同一个代码块中。

这是怎么回事。

第一行将TypedText设置为value。好的...

第二行,检查 TypedText 是否等于 value(剧透警报,确实如此),如果不相等则将它们设置为相等,然后告诉 WPF 您更改为值。

问题是,第二行从未运行其逻辑(告诉 WPF 我已经更改)。这从不运行的原因是第一行。

从您的代码中删除 TypedText = value;,它可能会正常工作。

    set
    {
        if (string.IsNullOrEmpty(value))// This is called when the text is empty
        {
            Some Logic//
        }             
        SetProperty(ref TypedText, value);   
    }

但是,最后一件事。我真的很讨厌 setter 做东西的代码。为什么这里有逻辑?对于外部用户,它可能会做一些意想不到的事情。