如何在 MVVM 中单击时清除文本框

How to clear text box on click in MVVM

我有一个文本框和一个按钮,我想在单击按钮时清除文本框的内容。我正在使用 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");
    }

但它不会清除文本框。我错过了什么?

您没有使用正确的 属性 名称 "TextProperty" 触发 PropertyChanged 事件 - 还是我遗漏了什么?我从未使用过棱镜。 尝试:

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

并从 属性 setter 中删除 SetProperty 调用。

这是因为在您的 setter 中,您设置了两次字段,一次没有触发 PropertyChanged ,另一次触发了 PropertyChanged ,在第二组中 SetProperty 将仅在以下情况下引发 PropertyChanged有一个新值,但您已经将该字段设置为某个值,因此通过 SetProperty 进行的设置将永远不会引发 PropertyChanged,因为您将其设置为相同的值。

所以在你的 setter 你应该删除:

selectedText = value;