自定义属性在Silverlight
问题描述:
我在我的项目中有两个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)
任何想法我做错了吗?显然,这一切可能在后台代码来完成,但是这似乎像正确的做法。
答
也就是说在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}" />
今天我偶然发现了这个。感谢您的好建议! (期待SL3中的Element绑定支持!) – 2009-04-04 02:59:29