質問

プロジェクトには2つのSilverlightコントロールがあり、どちらにもTeamIdプロパティがあります。次のような両方のユーザーコントロールをホストするコントロールで、XAMLでこれらをバインドします。

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

最初のコントロールでは、System.ComponentModel.INotifyPropertyChangedを実装し、TeamIdプロパティが変更されるとPropertyChangedイベントを発生させます。

2番目のコントロールでは、propdpスニペットを使用して、TeamIdをDependencyプロパティとして識別しました。

        // 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 =&quot; {Binding ElementName = oUserTeams、Path = TeamId}&quot;

特にElementName

可能な場合は、データオブジェクトをリソースに配置し、そこで宣言します。これを行うことができます。

<agChat:UserTeams x:Name="oUserTeams" 
       DataContext="{StaticResource myDataObject}" />
<agChat:OnlineUser x:Name="oOnlineUsers" 
       DataContext="{StaticResource myDataObject}" 
       TeamId="{Binding  TeamId}" />
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top