2010-03-17 16 views
7

Bağlı bir özellik değiştiyse bir değişiklik bildirimi almanın bir yolu var mı?Eklenen Özellik Değişti Etkinlik?

Basit bir örnek, içinde Rectangle bulunan Canvas'dur. Rectange'un konumu, DepenendyProperties Canvas.Top ve Canvas.Left kullanılarak ayarlanır. Dikdörtgen'i Canvas.Top ve Canvas.Left değiştirerek taşımak için bir Adorner kullanıyorum.

<Canvas Width="500" Height="500" > 
    <Rectangle Width="40" Height="40" Canvas.Left="10" Canvas.Top="20" /> 
</Canvas> 

sonraki adım, iki Rectangles arasında bir ok oluşturmaktır. Hareketli Rectangles'un kaydını tutmak için, Rectangle pozisyonu değiştiğinde Ok bir değişiklik bildirimi almalıdır. Ekli Özellik Canvas.Top değiştiğinde değiştirilmiş bir bildirim alabilirsem bu kolay olurdu. Herhangi bir yardım için

sayesinde Michael

+2

http://stackoverflow.com/questions/2192612/how-do-i-handle-canvas-top-change-event-in-wpf – Jake

+0

Bu bağlantı için teşekkürler. Tamamen bunu kaçırdı. –

cevap

16

Neden bağlayıcı kullanmak değil mi? Yani nedense, bir bağlama kullanamazsınız Eğer

, bir işleyici ekleyebilir için ... onlar haberdar olmak için tasarlandıkları şeyi tam olarak ne zaman özelliğinin değeri değiştiğinde:

var topDescriptor = DependencyPropertyDescriptor.FromProperty(Canvas.TopProperty, typeof(Rectangle)); 
var leftDescriptor = DependencyPropertyDescriptor.FromProperty(Canvas.LeftProperty, typeof(Rectangle)); 
topDescriptor.AddValueChanged(rectangle, rectangle_PositionChanged); 
leftDescriptor.AddValueChanged(rectangle, rectangle_PositionChanged); 

... 

private void rectangle_PositionChanged(object sender, EventArgs e) 
{ 
    ... 
} 
+0

Bu, hata ayıklama konusunda bana yardımcı oldu. Teşekkürler! – xr280xr

+2

Değişiklik yapılmaması durumunda, bellek sızıntılarına yol açtıklarından, değişiklik bildirimi için DependencyPropertyDescriptor kullanmaktan kaçınmalısınız. Daha fazla bilgi için [burada] (http://agsmith.wordpress.com/2008/04/07/propertydescriptor-addvaluechanged-alternative/) adresini okuyun. Bununla birlikte, bağlı mülkler üzerinde neden çalışmadığımı bulmaya çalışıyorum (bu soruyla ilgili olarak). Ancak bu bahşiş en azından benzer durumlara giren başkalarına bilgi vermelidir. – bigfoot