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