Как обновить конструктор класса, когда он связан с DataGrid? - PullRequest
0 голосов
/ 07 марта 2012

Итак, у меня есть следующий конструктор класса

public class BolaInfo
{
 private double massa;
 private double raio;
 private double corX;
 private double corY;
 private double max_x;
 private double min_x;
 private double max_y;
 private double min_y;
 private double teste;
 private double angulo;
 private double velocidade;
 private double velX;
 private double velY;
 private Random rand;
 private Random rand1;

 public BolaInfo()
 {
   this.rand = new Random();
   this.rand1 = new Random();

   MASSA = massa;
   VELOCIDADE = velocidade;
   RAIO = raio;
   CORX = corX;
   CORY = corY;
   ANGULO = angulo;

   ANGULO = (double)(rand.Next(0, 360));

   this.ellips = new Ellipse();
   ELLIPSE = ellips;
   ELLIPSE.SetResourceReference(Ellipse.FillProperty, "BallGrad");
   ELLIPSE.Width = RAIO * 2;
   ELLIPSE.Height = RAIO * 2;

   CORX = rand.Next((int)(RAIO),(int)(650 - RAIO));
   CORY = rand1.Next((int)(RAIO), (int)(440 - RAIO));

   VELOC_X = velX;
   VELOC_X = Math.Cos(angulo * Math.PI / 180);

   VELOC_Y = velY;
   VELOC_Y = Math.Sin(angulo * Math.PI / 180);
  } 

 public double MASSA { get; set; }
 public double RAIO { get; set; }
 public double CORX { get; set; }
 public double CORY { get; set; }
 public double VELOCIDADE { get; set; }
 public double VELOC_X { get; set; }
 public double VELOC_Y { get; set; }
 public double ANGULO { get; set; }
 public Ellipse ELLIPSE { get; set; }
}

Я использую сетку данных, привязанную к списку этого класса, и когда я добавляю новую строку, все выглядит нормально, кроме ELLIPSE.Width, ELLIPSE.Height, CORX, CORY, VELOC_X и VELOC_Y .

Проблема в том, что эти значения генерируются входом в RAIO и в соответствии с точками останова устанавливают его начальное значение равным 0 и не пересчитывают эти значения с новым значением.

Хотя я и вызывал функции, в которых объявлена ​​сетка данных, чтобы правильно установить эти значения, но я знаю, что это не самый лучший способ (по крайней мере, в моей голове).

Как я могу это исправить, не прибегая к этому способу?

Заранее спасибо.

1 Ответ

2 голосов
/ 07 марта 2012

из ваших соглашений об именах трудно сказать, назначаете ли вы атрибуты или свойства.Вы также, кажется, хотите использовать функции или свойства.Было бы полезно показать, как вы привязали RAIO к BolaInfo.может быть, вы ищете INotifyPropertyChanged-Interface :

public class BolaInfo : INotifyPropertyChanged{
   private double _angulo;
   private double _raio;
   private double? _velocityX;
   public BolaInfo(double initRaio)
   {
      var rand = new Random();
      //just do initialization of class members
      this.angulo = (double)(rand.Next(0, 360));
      this.raio = initRaio;
   }
   public double VelocityX
   {
     get{
        if( _velocityX == null ){
           _velocityX = Math.Cos(this.angulo * Math.PI / 180) + raio;
        }
        return _velocityX.Value;
     }
   }
   //writable property needs a setter
   public double Raio{
     get{ 
       return _raio;
     }
     set{
       if( _raio == value ) return;
       _raio = value;
       _velocityX = null;
       RaisePropertyChanged("Raio");
       RaisePropertyChanged("VelocityX");
     } 
   }
   private void RaisePropertyChanged(String propName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propName));
        }
    }
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...