将文本设置为字符串后,为什么我的文本框不清除文本?

莱利·瓦尔加(Riley Varga)

所以我MainWindow在其中设置了像这样的DataContext。

<Window.DataContext>
    <viewmodel:MainViewModel/>
</Window.DataContext>

并且TheMainViewModel具有一个称为Message

class MainViewModel : ObservableObject
{
private string _message;

public string Message
{
    get { return _message; }
    set
    {
        _message = value;
        OnPropertyChanged();
    }
}

}

ObservableObject超简单

class ObservableObject
{
    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

我面临的问题是我的TextBox..的绑定。正如我们在这里看到的那样,我目前正在将该Text属性绑定Message

<TextBox Text="{Binding Message, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
         VerticalAlignment="Center"
         Foreground="LightGray"
         BorderThickness="0"
         Margin="15,0,0,0"
         Width="600"
         TextWrapping="Wrap"
         x:Name="MessageBox">
    <TextBox.InputBindings>
        <KeyBinding Key="Return"
                    Command="{Binding SendMessageCommand}"/>
    </TextBox.InputBindings>
</TextBox>

命令

SendMessageCommand = new RelayCommand(o =>
{
    MessageBox.Show(Message);
    Message = string.Empty;
});

绑定效果很好!唯一的问题是,当我设置Message""或时,string.Empty它实际上不会反映在视图上。

让我们这个例子中,如果我在输入"Hello"进入TextBox并点击Enter它会显示一个MessageBox带有文本"Hello"和我们一样可以看到,如果我们看一下命令,我设置Message属性string.Empty后正确的,但它不更新在TextBox文本,它仍然会说"Hello",这很奇怪,因为如果我点击再输入一次显示一个空MessageBox

这是为什么?这是一个错误吗?

SomeBody

您应该实现接口INotifyPropertyChanged

class ObservableObject : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

否则,您的视图将无法订阅该事件,这意味着当您的属性值更改时,视图将永远不会得到通知。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将设置可观察到的空字符串添加后,不清除文本框吗?

来自分类Dev

为什么我的清除按钮仅在验证为真时清除文本框?

来自分类Dev

如何将文本框的文本设置为字符串中包含的文件中的一行?

来自分类Dev

将文本框值传递给字符串

来自分类Dev

获取焦点后,如何将光标置于文本框中字符串的末尾?

来自分类Dev

输入条形码并将值传递给字符串后自动清除文本框

来自分类Dev

单击将文本设置为文本框

来自分类Dev

单击将文本设置为文本框

来自分类Dev

如何将段落设置为文本框文本

来自分类Dev

c#rdlc设置文本框文本,没有参数名称字符串

来自分类Dev

react-setState 不清除文本框

来自分类Dev

将文本框的文本转换为字符串以用作字节

来自分类Dev

将文本框文本转换为带有代码的字符串

来自分类Dev

清除文本框

来自分类Dev

提交清除文本框后

来自分类Dev

MS Access:使用VBA将字符串从文本框拆分为其他文本框

来自分类Dev

“离开”文本框后,将十六进制字符串格式化为字节数组

来自分类Dev

为什么从其他文本框中删除值后仍然禁用文本框

来自分类Dev

其他用户窗体控件被清除后,如何不清除特定的文本框?

来自分类Dev

用户清除WPF中的文本字段时,文本框未将值设置为null

来自分类Dev

将参数从文本框传递到sql语句字符串-单引号(')杀死了我

来自分类Dev

为什么在我的模型中填充文本框而不是文本框?

来自分类Dev

如何使用列表框将文本文件字符串发送到文本框?

来自分类Dev

仅从文本框中的字符串打印元音

来自分类Dev

在文本框中显示连接的字符串

来自分类Dev

无法在富文本框中看到字符串

来自分类Dev

Winform在文本框中拆分字符串

来自分类Dev

在文本框中显示字符串变量

来自分类Dev

在文本框中显示连接的字符串

Related 相关文章

  1. 1

    将设置可观察到的空字符串添加后,不清除文本框吗?

  2. 2

    为什么我的清除按钮仅在验证为真时清除文本框?

  3. 3

    如何将文本框的文本设置为字符串中包含的文件中的一行?

  4. 4

    将文本框值传递给字符串

  5. 5

    获取焦点后,如何将光标置于文本框中字符串的末尾?

  6. 6

    输入条形码并将值传递给字符串后自动清除文本框

  7. 7

    单击将文本设置为文本框

  8. 8

    单击将文本设置为文本框

  9. 9

    如何将段落设置为文本框文本

  10. 10

    c#rdlc设置文本框文本,没有参数名称字符串

  11. 11

    react-setState 不清除文本框

  12. 12

    将文本框的文本转换为字符串以用作字节

  13. 13

    将文本框文本转换为带有代码的字符串

  14. 14

    清除文本框

  15. 15

    提交清除文本框后

  16. 16

    MS Access:使用VBA将字符串从文本框拆分为其他文本框

  17. 17

    “离开”文本框后,将十六进制字符串格式化为字节数组

  18. 18

    为什么从其他文本框中删除值后仍然禁用文本框

  19. 19

    其他用户窗体控件被清除后,如何不清除特定的文本框?

  20. 20

    用户清除WPF中的文本字段时,文本框未将值设置为null

  21. 21

    将参数从文本框传递到sql语句字符串-单引号(')杀死了我

  22. 22

    为什么在我的模型中填充文本框而不是文本框?

  23. 23

    如何使用列表框将文本文件字符串发送到文本框?

  24. 24

    仅从文本框中的字符串打印元音

  25. 25

    在文本框中显示连接的字符串

  26. 26

    无法在富文本框中看到字符串

  27. 27

    Winform在文本框中拆分字符串

  28. 28

    在文本框中显示字符串变量

  29. 29

    在文本框中显示连接的字符串

热门标签

归档