2012-03-06 29 views
0

所以我在类的构造函数如下如何更新绑定到DataGrid的类构造函数?

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.WidthELLIPSE.HeightCORXCORYVELOC_XVELOC_Y

问题是这些值是由RAIO中的输入生成的,并且根据断点将其初始值设置为0,并且不重新使用它的新值重新计算这些值。

虽然我调用函数的地方是声明datagrid来正确设置这些值,但我知道这不是最好的实践方式(至少在我的脑海中)。

我该如何解决这个问题而不诉诸于此?

在此先感谢。

+4

只是一个观察:'Random'类的实例是基于当前的时间,这意味着在连续快速创建的实例都将产生伪随机数的十分相似套播种。您不需要在构造函数中创建Random,您通常需要使用静态初始化函数在您的类中声明一个“private static Random”字段,并在所有的“BolaInfo”实例中使用该字段。 – 2012-03-06 21:53:43

+0

我知道,但到目前为止,他们没有产生类似的结果,多次测试。但谢谢你的建议:) – CMCB 2012-03-06 22:41:31

回答

2

从命名约定中很难判断,无论您是指定属性还是属性。 您似乎也想使用函数或属性。显示你如何限制RAIOBolaInfo将有帮助。也许你正在寻找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)); 
     } 
    } 
} 
+0

我会发布全班! – CMCB 2012-03-06 22:34:36

相关问题