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

时间:2015-04-08 06:57:14

标签: c# wpf mvvm prism

我有一个文本框,我在其中处理其文本更改事件。现在,当我单击按钮时,我想清除文本框中的文本。

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

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>

视图模型

   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;
    }

2 个答案:

答案 0 :(得分:1)

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

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

这两行代码应该/永远不会出现在同一代码块中。

这是怎么回事。

第一行将TypedText设置为value。 OKAY ...

第二行,检查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所做的代码。为什么这里有逻辑?从外部用户,它可能会做一些意想不到的事情。

答案 1 :(得分:0)

  

我有一个文本框,我正在处理其文本更改事件

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

<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;
}