2008-08-24 17 views
3

Projemde iki Silverlight Denetimi var, her ikisinin de TeamId özellikleri var. Her iki kullanıcıyı barındıran kontrolünde XAML birlikte bu bağlamak ister benzer kontrolleri olacaktır: Ben System.ComponentModel.INotifyPropertyChanged uygulanması ve değişen TakımID mülkiyet üzerine PropertyChanged olay yükselterek ediyorum ilk kontroldeSilverlight'ta Özel Öznitelik Bağlaması

 <agChat:UserTeams x:Name="oUserTeams" /> 
     <agChat:OnlineUser x:Name="oOnlineUsers" TeamId="{Binding ElementName=oUserTeams, Path=TeamId}" /> 

. İkinci kontrolde

, bir Bağımlılık özelliği olarak TakımID tanımlamak için propdp pasajını kullandım. Silverlight kontrolleri ilk yaratılan aldığında

 // Using a DependencyProperty as the backing store for TeamId. This enables animation, styling, binding, etc... 
    public static readonly DependencyProperty TeamIdProperty = 
     DependencyProperty.Register(
     "TeamId", 
     typeof(string), 
     typeof(OnlineUsers), 
     new System.Windows.PropertyMetadata(new System.Windows.PropertyChangedCallback(TeamChanged))); 

Ancak, Silverlight gelen takip istisna olsun: Yanlış yapıyorum

Unhandled Error in Silverlight 2 Application Invalid attribute value {Binding ElementName=oUserTeams, Path=TeamId} for property TeamId. [Line: 21 Position: 146] at System.Windows.Application.LoadComponent(Object component, Uri xamlUri) at agChat.Page.InitializeComponent() at agChat.Page..ctor() at agChat.App.Application_Startup(Object sender, StartupEventArgs e) at System.Windows.CoreInvokeHandler.InvokeEventHandler(Int32 typeIndex, Delegate handlerDelegate, Object sender, Object args) at MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj, IntPtr unmanagedObjArgs, Int32 argsTypeIndex, String eventName) 

Herhangi bir fikir? Açıkçası bu, kod arkasıyla yapılabilir, ancak bu , doğru yaklaşım gibi gibi görünüyor.

cevap

4

WPF'de doğru yaklaşım budur, ancak Silverlight'ta değil.

Silverlight'ta xaml öğesini kullanarak öğeleri bağlayamazsınız.

Bu Soruna çizgisidir: TakımID = "{Binding ElementName = oUserTeams, Yol = TakımID}"

Specificly ElementName

Eğer yapabilirseniz, Kaynaklar içine veri nesne koyun ve orada ilan, o zaman bunu yapabilirsiniz:

<agChat:UserTeams x:Name="oUserTeams" 
     DataContext="{StaticResource myDataObject}" /> 
<agChat:OnlineUser x:Name="oOnlineUsers" 
     DataContext="{StaticResource myDataObject}" 
     TeamId="{Binding TeamId}" /> 
+0

Bugün bunun üzerinde tökezledim. Büyük öneri için teşekkürler! (SL3'te Eleman bağlama desteğini bekliyorum!) –

İlgili konular