2008-08-24 10 views
3

Ich habe zwei Silverlight Controls in meinem Projekt, beide haben Eigenschaften TeamId. Ich mag diese zusammen in XAML in der Steuerung binden, sowohl Benutzer-Hosting steuert ähnlich wie:Benutzerdefinierte Attributbindung in Silverlight

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

In der ersten Kontrolle, ich bin Umsetzung System.ComponentModel.INotifyPropertyChanged und Anheben des Property Ereignisses auf der TeamId Eigenschaft zu ändern .

Im zweiten Steuerelement habe ich das Propdp-Snippet verwendet, um die TeamId als Dependency-Eigenschaft zu identifizieren.

 // 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))); 

jedoch, wenn der Silverlight-Steuerelemente zum ersten Mal erstellt wird, erhalte ich die Folge Ausnahme von Silverlight:

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) 

Alle Ideen, was ich falsch mache? Natürlich könnte dies alles in Code-Behind getan werden, aber diese scheint wie der richtige Ansatz.

Antwort

4

Das ist der richtige Ansatz in WPF, aber nicht in Silverlight.

Sie können keine Elemente mit Xaml in Silverlight binden.

Dies ist die Codezeile: TeamId = "{Binding Elementname = oUserTeams, Path = TeamId}"

specificly Element

Wenn Sie können, das Datenobjekt in Ressourcen platzieren und dort erklären, dann können Sie das tun:

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

Ich bin heute darüber gestolpert. Danke für den tollen Vorschlag! (Wir freuen uns auf die Unterstützung von Elementen in SL3!) –

Verwandte Themen