2008-08-24 150 views
3

我在我的項目中有兩個Silverlight控件綁定,都具有性能TeamId。我想在XAML中同時承載用戶的控制結合在一起,這些控制類似於:自定義屬性在Silverlight

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

在第一控制,我採取System.ComponentModel.INotifyPropertyChanged並呼籲TeamId屬性提高PropertyChanged事件改變。

在第二控制中,我使用的propdp片段來識別TeamId作爲依賴屬性。

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

然而,Silverlight控件第一次被創建的時候,我從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) 

任何想法我做錯了嗎?顯然,這一切可能在後臺代碼來完成,但是這似乎正確的做法。

回答

4

也就是說在WPF正確的做法,但不是在Silverlight。

您不能綁定到在Silverlight使用XAML元素。

這是有問題的行: TeamId = 「{綁定的ElementName = oUserTeams,路徑= TeamId}」

Specificly的ElementName

如果可以的話,請將數據對象爲資源,並宣佈它在那裏,那麼你可以這樣做:

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

今天我偶然發現了這個。感謝您的好建議! (期待SL3中的Element綁定支持!) – 2009-04-04 02:59:29