UIElement
如果视图模型与集合中的另一个视图模型具有相同的属性,则该视图模型绑定到错误。
我有一个Canvas
表示矩阵的控件,并且此画布绑定到一组矩形视图模型。每个矩形视图模型都与一个模型相关,该模型具有一个 Move() 方法,该方法设置模型的坐标,进而告诉矩形在矩阵 (x,y) 上移动的位置。
public class RectangleModel
{
public void Move()
{
// Logic to find out where to move
// sets x,y coordinates for the model
this.Location.X = x;
this.Location.Y = y
}
}
Canvas 视图模型有一个 DispatcherTimer,它在执行时循环通过画布的 ObservableCollection 中的每个矩形视图模型并调用 MoveModel() 方法,该方法又调用它引用的矩形模型上的 Move 方法。
public class CanvasViewModel
{
private void MoveAllRectangles()
{
for(int i = 0; i < obsCol.Size; i++)
{
obsCol[i].MoveModel();
}
}
public class RectangleViewModel
{
private RectangleModel InstanceModel
{
get{ return this.instanceModel; }
set{ this.instanceModel = value;}
}
public int XPos
{
get
{
return this.InstanceModel.Location.X;
}
}
public int YPos
{
get
{
return this.InstanceModel.Location.Y;
}
}
public void MoveModel()
{
this.InstanceModel.Move();
NotifyOfPropertyChange(string.Empty);
}
}
这工作正常,画布上的所有矩形每秒都会移动到矩阵上的相邻图块。直到一个矩形移动到已经被另一个矩形占据的图块(具有相同 XPos、YPos 属性的视图模型),一旦发生这种情况,两个矩形都会绑定到同一个视图模型(看起来如此)并且一旦计时器执行两个矩形移动到相同的位置。因此,如果我从画布上的五个矩形开始,最终它们将全部组合在一起,并且只有 1 个矩形会在画布上四处移动。
调试问题会导致矩形正确移动,如果一个矩形最终出现在另一个矩形平铺中,那么下一次迭代该矩形将简单地移出平铺并正确进行。
任何帮助将不胜感激。