سؤال

لدي عنصري تحكم Silverlight في مشروعي، وكلاهما لهما خصائص TeamId.أرغب في ربطهما معًا في XAML في عنصر التحكم الذي يستضيف كلاً من عناصر تحكم المستخدم المشابهة لـ:

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

في عنصر التحكم الأول، أقوم بتطبيق System.ComponentModel.INotifyPropertyChanged ورفع الحدث PropertyChanged عند تغيير خاصية TeamId.

في عنصر التحكم الثاني، استخدمت مقتطف 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.

لا يمكنك ربط العناصر باستخدام xaml في Silverlight.

هذا هو الخط المخالف:TeamId="{Binding ElementName=oUserTeams, Path=TeamId}"

على وجه التحديد اسم العنصر

إذا كان بإمكانك، ضع كائن البيانات في الموارد وأعلنه هناك، ثم يمكنك القيام بذلك:

<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