如何清除点击按钮上的文本框
How to clear textbox on click button
我有一个文本框,我在其中处理它的文本已更改 event.Now 当我单击按钮时我想清除文本框中的文本。
现在,当我在文本框中输入文本时,当我调用我的命令时,文本不会被清除。
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>
ViewModel
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;
}
I have a textbox in which I am handling its text changed event
不,你没有,或者至少在你的问题中显示的代码摘录中没有:
<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;
}
您似乎不了解您使用的框架
public string SearchText
{
set
{
TypedText = value;
SetProperty(ref TypedText, value);
}
}
这两行代码should/could永远不会在同一个代码块中。
这是怎么回事。
第一行将TypedText
设置为value
。好的...
第二行,检查 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 做东西的代码。为什么这里有逻辑?对于外部用户,它可能会做一些意想不到的事情。
我有一个文本框,我在其中处理它的文本已更改 event.Now 当我单击按钮时我想清除文本框中的文本。
现在,当我在文本框中输入文本时,当我调用我的命令时,文本不会被清除。
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>
ViewModel
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;
}
I have a textbox in which I am handling its text changed event
不,你没有,或者至少在你的问题中显示的代码摘录中没有:
<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;
}
您似乎不了解您使用的框架
public string SearchText
{
set
{
TypedText = value;
SetProperty(ref TypedText, value);
}
}
这两行代码should/could永远不会在同一个代码块中。
这是怎么回事。
第一行将TypedText
设置为value
。好的...
第二行,检查 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 做东西的代码。为什么这里有逻辑?对于外部用户,它可能会做一些意想不到的事情。