none
Rectangle an ein Objekt binden RRS feed

  • Frage

  • Hey Ihr,

    Ich versuche ein paar Tagen ein Rectangle, das in einem Canvas liegt an ein Objekt in meinem C# Code zu binden. Ich habe also in der Anzeige ein REctangle und im Code ein Objekt das x und y Koordinaten hat. Jetzt würde ich gerne Canvas.Left und Canvas.Top an die X und Y Koordinaten dieses Objekts binden so, dass wenn ich diese Verändere das Rectangle sich bewegt.

    Wenn ich im Code direkt das Rectangle verändere also mit Canvas.setLeft(Rectangle, Wert) Funktioniert das ja Problemlos.

    <Rectangle
                        x:Name="BallUI"
                        Fill="#FF98FF94"
                        Stroke="{x:Null}"
                        StrokeThickness="10"
                        Height="20"
                        Width="20"
                        Canvas.Left="{Binding ball.X}"
                        Canvas.Top="{Binding ball.Y}" />
    Das ist der REctangle ausschnitt. Liegt wie gesagt in einem Canvas und im C# Code habe ich quasi so etwas:

    BallPosition ball;
    class BallPosition
        {
            private double x;
            private double y;
            
            public double X
            {
                get
                {
                    return x;
                }
                set
                {
                    x = value;
                }
            }
    
            public  double Y
            {
                get
                {
                    return y;
                }
                set
                {
                    y = value;
                }
            }
        }
    Wenn ich jetzt ball.X++ mache hätte ich gerne das sich das rectangle um eins nach rechts bewegt. Ist sowas möglich?
    Sonntag, 1. November 2009 21:15

Antworten

  • Hallo,

    ja das ist möglich.
    Nur muß Deine Klasse eine Änderungbenachrichtung via INotifyPropertyChanged unterstützen,
    damit die Änderung auch bei der Bindung ankommt. Siehe die Beschreibung zu Binding .

    Für Deine Klasse wäre das:
       class BallPosition : INotifyPropertyChanged
        {
            private double x;
            private double y;
    
            public double X
            {
                get { return x; }
                set
                {
                    if (x != value)
                    {
                        x = value;
                        OnPropertyChanged("X");
                    }
                }
            }
    
            public double Y
            {
                get { return y; }
                set
                {
                    if (y != value)
                    {
                        y = value;
                        OnPropertyChanged("Y");
                    }
                }
            }
    
            #region INotifyPropertyChanged Member
            protected void OnPropertyChanged(string propertyName)
            {
                PropertyChangedEventHandler handler = this.PropertyChanged;
                if (handler != null)
                    handler(this, new PropertyChangedEventArgs(propertyName));
            }
    
            public event PropertyChangedEventHandler PropertyChanged;
            #endregion
        }

    Gruß Elmar


    Dienstag, 3. November 2009 11:52