【问题标题】:WPF Update Source Trigger ImplementationWPF 更新源触发器实现
【发布时间】:2010-03-16 01:42:05
【问题描述】:

我有一个自定义对象 Foo,它带有一个名为 Flagged 的​​布尔属性,当有人在文本框中成功键入内容时,它会将 flagged 更改为 true,并用一些文本更新屏幕上的另一个文本块。问题是我可以让它加载初始数据,但是当用户成功输入一些东西来翻转标志时没有任何反应。

我必须在后面的代码中完成大部分工作,并且我已经在我的对象 Foo 上实现了 INotifyPropertyChanged。我下面的代码有什么问题?

谢谢。

private Border CreateNewBorder()
    {
        Border b = new Border();
        TextBlock tb = new TextBlock();
        tb.TextAlignment = TextAlignment.Center;

        b.Style = (Style)this.FindResource("myBorder");
        tb.SetBinding(TextBlock.TextProperty, CreateBinding());
        b.Child = tb;

        return b;
    }

    private Binding CreateBinding()
    {
        Binding bind = new Binding();
        bind.Source = Foo;
        bind.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
        bind.Mode = BindingMode.TwoWay;
        bind.Path = new PropertyPath("Flagged");
        bind.Converter = new BoolToStringConverter();

        return bind;
    }

【问题讨论】:

  • 您是否在调试器中验证了用户键入时已将 Flagged 设置为 true?在 CreateBinding() 中用作 Source 的 Foo 对象是否与用户键入时正在更新的实例相同?您可以发布 Foo 代码的相关位吗?
  • 另请注意,在 TextBlock.Text 绑定上设置 UpdateSourceTrigger(或 Mode=TwoWay)是没有意义的——用户无法键入 TextBlock,因此永远不会有任何更新可推回到绑定源。

标签: wpf data-binding updatesourcetrigger


【解决方案1】:

听起来您可能只是缺少 Foo 上的更改通知。您是否在 Foo 上实现了 INotifyPropertyChanged 并从 Flagged setter 调用了 PropertyChanged 事件?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-24
    • 1970-01-01
    • 1970-01-01
    • 2011-06-13
    • 2012-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多