1

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 个矩形会在画布上四处移动。

调试问题会导致矩形正确移动,如果一个矩形最终出现在另一个矩形平铺中,那么下一次迭代该矩形将简单地移出平铺并正确进行。

任何帮助将不胜感激。

4

0 回答 0