我有一个文本框和一个按钮,我想在按钮点击时清除文本框的内容。我正在使用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");
}
但它没有清除文本框。我错过了什么?
答案 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调用。