【问题标题】:UWP TextBox.Text binding not updating when using PlaceholderText使用 PlaceholderText 时 UWP TextBox.Text 绑定未更新
【发布时间】:2016-01-17 18:19:34
【问题描述】:

我有一些文本框,我想为其设置PlaceholderText 属性。每个框的文本都绑定到底层视图模型的属性。现在像这样在 XAML 中设置占位符时

<TextBox PlaceholderText="Placeholder" Text={Binding PropertyName} />

我注意到,当文本框失去焦点时,视图模型的属性不再更新。 而没有占位符,绑定工作得很好。

这种行为是有意的吗?是否有任何解决方法,或者我是否必须坚持描述每个框的预期输入的经典TextBlock

编辑:该属性确实实现了INotifyPropertyChanged,并且当没有设置占位符时,绑定会在视图模型中更新。

【问题讨论】:

  • 尝试将 UpdateSourceTrigger 设置为 PropertyChanged。请注意:您甚至不必使用 TextBlock。只需设置 Header 属性。
  • @RareNcool 不幸的是,设置UpdateSourceTrigger 并没有改变任何东西。但感谢 Header 属性的提示。
  • 文本块绑定的属性是否也实现了INotiftyProperty更改接口?
  • 试试 Text="{x:Bind PropertyName, Mode=TwoWay}"
  • @KenTucker 是的,该属性确实实现了 INotifyPropertyChanged,并且在不设置占位符文本时确实有效。

标签: c# xaml textbox uwp


【解决方案1】:

TextBox 的 PlaceholderText 在失去焦点时不会改变 TextBox 的行为。

您可以尝试为 Text 属性显式使用“TwoWay”绑定模式,而不是“默认”绑定模式。

<TextBox PlaceholderText="Placeholder" Text="{x:Bind PropertyName, Mode=TwoWay}" />

确保您的视图的 DataContext 设置为您的视图模型,如下所示

    public MainPage()
    {
        this.DataContext = new MainViewModel();

        this.InitializeComponent();            
    }

有关绑定模式的更多信息,请参阅

https://msdn.microsoft.com/en-us/library/windows/apps/mt204783.aspx

【讨论】:

  • 所以我们在这里说的是标准文本输入控件的默认绑定模式是 OneWay... 我了解使用带有 OneWay 绑定的文本框的常见模式,但肯定是输入控件的默认模式应该是两种方式。
  • 这就是我的想法,来自我在 WPF 中的经验。但在 UWP 中,默认是一种方式。
猜你喜欢
  • 1970-01-01
  • 2017-07-31
  • 1970-01-01
  • 2010-11-10
  • 2020-01-16
  • 2019-01-22
  • 2017-04-04
  • 1970-01-01
  • 2013-05-26
相关资源
最近更新 更多