Сведения о вопросе

PIRLO

02:57, 4th August, 2020

Теги

silverlight    

Привязка пользовательского атрибута в Silverlight

Просмотров: 468   Ответов: 1

У меня есть два элемента управления 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)

Есть идеи, что я делаю неправильно? Очевидно, что все это может быть сделано в коде, но это кажется правильным подходом.



  Сведения об ответе

JUST___

04:35, 14th August, 2020

Это правильный подход в WPF, но не в Silverlight.

Вы не можете привязаться к элементам, используя xaml в Silverlight.

Это оскорбительная линия: TeamId= " {Привязка ElementName=oUserTeams, Путь=TeamId}"

Конкретно ElementName

Если вы можете поместить объект данных в ресурсы и объявить его там, то вы можете сделать это:

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться