【问题标题】:WPF bound object update notificationWPF 绑定对象更新通知
【发布时间】:2010-04-06 22:27:42
【问题描述】:

我有一个绑定了一些对象的 TreeView,我们可以这样说:

public class House
    {
        public List<Room> Rooms { get; set; }
        public List<Person> People { get; set; }

        public House()
        {
            this.Rooms = new List<Room>();
            this.People = new List<Person>();
        }

        public void BuildRoom(string name)
        {
            this.Rooms.Add(new Room() { Name = name });
        }

        public void DestroyRoom(string name)
        {
            this.Rooms.Remove(new Room() { Name = name });
        }

        public void PersonEnter(string name)
        {
            this.People.Add(new Person() { Name = name });
        }

        public void PersonLeave(string name)
        {
            this.People.Remove(new Person() { Name = name });
        }
    }

    public class Room
    {
        public string Name { get; set; }
    }

    public class Person
    {
        public string Name { get; set; }
    }

TreeView 正在监视 House 对象,每当一个房间被建造/摧毁或一个人进入/离开时,我的树视图都会更新自己以显示房子的新状态(为了简单起见,我省略了一些实现细节)。

我想要知道更新完成的确切时间,所以我可以在那里做一些事情,事情是我创建了所选项目的指示器,当有东西移动时,我需要更新所述指示器的位置,这就是我在树视图更新时需要它的原因。

如果您知道解决方案,请告诉我。

此外,代码并不完美(DestroyRoom 和 PersonLeave),但您明白了。

谢谢!

【问题讨论】:

  • 将指示器作为项目模板的一部分并将其可见性绑定到 IsSelected 不是更容易吗?这似乎是一种比尝试进入绘图周期更自然的方法,但我不确定你的限制是什么。
  • @itwolson:我们可以,但这带来了一些我们已经在这个问题中解决的问题。我们已经在这里呆了几个小时,这是唯一剩下的问题。当然,如果我们不能很快解决它,我们将不得不采取不同的方法,这可能就是您所建议的。谢谢!

标签: wpf data-binding


【解决方案1】:

使用 ObservableCollection 并将其包装在 CollectionView 中以获取可绑定的 CurrentItem。

http://msdn.microsoft.com/en-us/library/system.windows.data.collectionview_members.aspx

【讨论】:

  • 实际上这就是我拥有的 ObservableCollection 而不是列表,我不应该回避这个细节。无论如何,当 CollectionChanged 事件发生时,树视图仍然没有更新它的项目,所以这也不起作用。
  • 您使用的是分层数据模板吗? - 如果没有,您将不会获得子项目。树视图的 itemsSource 属性是否正确绑定到可观察集合? (尝试将标签的内容绑定到集合的计数,并将另一个绑定到集合以测试这一点 - 应该在一个中获取一个数字,在另一个中获取类名)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-24
  • 2011-05-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多