【问题标题】:Binding to an auto-updating object?绑定到自动更新对象?
【发布时间】:2009-03-05 07:23:24
【问题描述】:

是否有一个对象或接口可用于创建自动更新对象,并让这些更新过滤到 WPF 中的 UI?

基本上我正在寻找这样的东西:

<TextBlock Text="{Binding Source={StaticResource myClass}, Path=DataObject}" />

public class MyClass
{
    public AutoUpdatingObject DataObject { get; set; }
}

public class AutoUpdatingObject: ???
{
    ???
}

不,我不能让 MyClass 实现 INotifyPropertyChanged。我需要 AutoUpdatingObject 类能够通知 WPF 更改。

【问题讨论】:

  • 为什么不能实现 INotifyPropertyChanged ?
  • 呃,伙计,你可能在这里陷入困境。如果您可以更改 XAML,请尝试 PriorityBinding,其中一个绑定到 MyClass,一个绑定到实现 INotifyPropertyChanged 的​​虚拟类,并知道 AutoUpdatingObject 何时完成。不确定 PriorityBinding 是否会选择这些通知。
  • 这将用于库,库的用户将在其中实现 MyClass 对象。如果可行,我可以在 AutoUpdatingObject 上实现 INotifyPropertyChanged。

标签: c# .net wpf data-binding xaml


【解决方案1】:

实现 INotifyPropertyChanged 不是更新绑定的唯一方法,您还可以在不实现接口的情况下使用事件。

Using a CLR Class as the Binding Source Object

如果不实施 INotifyPropertyChanged,那么你必须 安排您自己的通知 系统以确保使用的数据 在绑定中保持最新。你可以 通过提供更改通知 支持 PropertyChanged 模式 对于您要更改的每个属性 通知。为了支持这个 模式,你定义一个 每个的 PropertyNameChanged 事件 属性,其中 PropertyName 是 财产的名称。你提高 每次属性更改时的事件。

在您的情况下,MyClass 看起来像这样:

public class MyClass
{
    private AutoUpdatingObject dataObject;
    public AutoUpdatingObject DataObject
    {
        get { return dataObject; }
        set { dataObject = value; DataObjectChanged(this, new EventArgs()); }
    }

    public event EventHandler DataObjectChanged = delegate { };
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多