如何清除MVVM中的单击文本框

时间:2015-04-08 05:20:02

标签: c# wpf mvvm prism

我有一个文本框和一个按钮,我想在按钮点击时清除文本框的内容。我正在使用MVVM棱镜。

我的 XAML

  <TextBox  Grid.Row="0" Text="{Binding 
       Path=TextProperty,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}" Name="txtUserEntry2"/>

   <Button Content="Select" 
       Command="{Binding Path=MyCommand}" />

和我的查看模型

    public string TextProperty
    {

        get
        {
            return selectedText;
        }
        set
        {

            selectedText = value;

            SetProperty(ref selectedText, value);
        }
    }

    //////.........

    private void MyCommandExecuted(object obj)
    {
        TextProperty= string.Empty;
        MessageBox.Show("Command Executed");
    }

但它没有清除文本框。我错过了什么?

2 个答案:

答案 0 :(得分:3)

因为在你的setter中你设置了两次字段,一次没有触发PropertyChanged而另一次触发PropertyChanged,在第二组SetProperty中只有在有新值时才会引发PropertyChanged,但是你已经将字段设置为某个值,因此通过SetProperty的集合永远不会引发PropertyChanged,因为你将它设置为相同的值。

所以在你的二传手中你应该删除:

selectedText = value;

答案 1 :(得分:-2)

您没有使用正确的属性名称触发PropertyChanged事件&#34; TextProperty&#34; - 或者我错过了什么?我从未使用过Prism。 尝试:

public string TextProperty
{

    get
    {
        return selectedText;
    }
    set
    {
        SetProperty(ref selectedText, value, "TextProperty");
    }
}

或更好:

private void MyCommandExecuted(object obj)
{
    SetProperty(TextProperty, string.Empty);
    MessageBox.Show("Command Executed");
}

并从属性设置器中删除SetProperty调用。