Domanda

Ho due controlli Silverlight nel mio progetto, entrambi hanno proprietà TeamId.Vorrei unirli insieme in XAML nel controllo che ospita entrambi i controlli utente simili a:

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

Nel primo controllo sto implementando System.ComponentModel.INotifyPropertyChanged e generando l'evento PropertyChanged alla modifica della proprietà TeamId.

Nel secondo controllo ho utilizzato lo snippet propdp per identificare TeamId come proprietà di dipendenza.

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

Tuttavia, quando vengono creati per la prima volta i controlli Silverlight, ottengo la seguente eccezione da 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)

Qualche idea su cosa sto facendo di sbagliato?Ovviamente tutto questo potrebbe essere fatto in code-behind, ma questo sembra come l'approccio corretto.

È stato utile?

Soluzione

Questo è l'approccio corretto in WPF, ma non in Silverlight.

Non è possibile associare elementi utilizzando xaml in Silverlight.

Questa è la riga incriminata:TeamId="{Binding ElementName=oUserTeams, Path=TeamId}"

Nello specifico ElementName

Se puoi, inserisci l'oggetto dati in Risorse e dichiaralo lì, quindi puoi farlo:

<agChat:UserTeams x:Name="oUserTeams" 
       DataContext="{StaticResource myDataObject}" />
<agChat:OnlineUser x:Name="oOnlineUsers" 
       DataContext="{StaticResource myDataObject}" 
       TeamId="{Binding  TeamId}" />
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top