【发布时间】: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