Frage

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

        <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 das Property Ereignis auf dem TeamId Eigenschaft Wechsel zu erhöhen.

In der zweiten Kontrolle habe ich den propdp Schnipsel verwendet, um die TeamId als Abhängigkeitseigenschaft 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)));

Wenn jedoch 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 das scheint wie der richtige Ansatz.

War es hilfreich?

Lösung

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

Sie können nicht auf Elemente binden XAML in Silverlight verwenden.

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

specificly Elementname

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

<agChat:UserTeams x:Name="oUserTeams" 
       DataContext="{StaticResource myDataObject}" />
<agChat:OnlineUser x:Name="oOnlineUsers" 
       DataContext="{StaticResource myDataObject}" 
       TeamId="{Binding  TeamId}" />
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top