【问题标题】:TextBlock Text Property only Binding once even Binding Mode Set to TwoWayTextBlock 文本属性仅绑定一次,甚至绑定模式设置为 TwoWay
【发布时间】:2018-05-01 04:31:06
【问题描述】:

源代码:

class Cons
{
    public Cons()
    {
        BaseDir = AppDomain.CurrentDomain.BaseDirectory;
        SetProperty();
    }
    private void SetProperty()
    {
        NowPlaying = "Hello";
    }
    public string NowPlaying{get; set; }
}
public partial class MainWindow
{
    Cons Resources = new Cons()
    public MainWindow()
    {
         txbl.DataContext = Resources;
         Resources.NowPlaying = "NoHello";
    }
}

还有一个文本块<Textblock x:Name="txbl" Text="{Binding NowPlaying, Mode=TwoWay}"/> 当我在 MainWindow 构造函数中设置 NowPlaying 属性时,该属性更改为“NoHello”,但即使我设置绑定模式 = TwoWay,TextBlock 文本属性仍然是 Hello

问题发生时我捕获的图像

【问题讨论】:

  • 我不知道你做错了什么。我复制了你的代码,它工作正常。顺便说一句,您不需要binding mode = TwoWay,因为无法从 GUI 更改 TextBlock

标签: c# wpf binding


【解决方案1】:

您提到的代码可以正常工作。文本块确实显示了新值“NoHello”。 但是,如果您希望在加载文本块后更新属性值 NowPlaying,请在您的类 Cons 上实现 INotifyPropertyChanged 并在属性 NowPlaying 的设置器中引发 PropertyChanged。

【讨论】:

  • 如果我想在创建 TextBlock 后通过 Binding 更改属性,那么我需要使用该接口吗?事件发生时我更改了 NowPlaying 属性
  • 是的。请参考msdn.microsoft.com/en-us/library/ms229614(v=vs.85).aspx 在您的课程中实现它。
  • 即使我添加了 INotifyPropertyChanged Source here 但它仍然无法正常工作
  • 它在您提供的代码 sn-p 中正常工作。绑定肯定有其他问题。 workingResources 是文本块的正确 DataContext 吗?
  • @QuanVN 您正在将变量 N​​owplaying 传递给 NotifyPropertyChanged,而不是带有变量名称的字符串。将该行更改为 NotifyPropertyChanged("Nowplaying"),带引号。
猜你喜欢
  • 2021-10-10
  • 1970-01-01
  • 2016-10-26
  • 1970-01-01
  • 2015-03-14
  • 1970-01-01
  • 2017-07-02
  • 2015-10-15
  • 2013-01-15
相关资源
最近更新 更多