Привязка свойства пользовательского элемента управления в Silverlight - PullRequest
0 голосов
/ 10 февраля 2012

У меня есть пользовательский контроль, который я создал. Используется в шаблоне данных списка. Окно списка привязано к наблюдаемой коллекции пользовательских объектов.

Мне нужен способ передать текущий объект в мой usercontrol через привязку.

Я попытался создать публичное свойство для пользовательского элемента управления следующим образом:

public TypedMediaItem CurrentItem { get; set; }

И установить параметры привязки:

<my:LargeStreamItemControl Height="160" Width="295" CurrentItem="{Binding }" />

Однако это дает мне следующую ошибку:

Объект типа «System.Windows.Data.Binding» не может быть преобразован в тип «F1MediaCentre.Classes.Payload.Typed.TypedMediaItem».

Я не уверен, в чем я ошибаюсь - я новичок в Silverlight, унаследовав живое производственное приложение от бывшего коллеги, и я ломаю себе голову этим.

1 Ответ

3 голосов
/ 10 февраля 2012

Я попытаюсь сделать это ... возможно, вы не сможете связать его, потому что это не свойство зависимости.

Добавьте это в свой пользовательский элемент управления вместо текущего CurrentItem:

    Public Shared ReadOnly CurrentItemProperty As DependencyProperty = _
    DependencyProperty.Register("CurrentItem", GetType(TypedMediaItem), GetType(LargeStreamItemsControl), New PropertyMetadata(Nothing))
    Public Property CurrentItem() As TypedMediaItem
        Get
            Return DirectCast(GetValue(LargeStreamItemsControl.CurrentItemProperty), TypedMediaItem)
        End Get
        Set(value As TypedMediaItem)
            SetValue(LargeStreamItemsControl.CurrentItemProperty, value)
        End Set
    End Property

Извините, я делаю в основном VB ... надеюсь, вы сможете конвертировать в C #:)

Это сделает его зависимым свойством, и поэтому вы сможете связываться с ним.

Хорошо, вот C #:

public static readonly DependencyProperty CurrentItemProperty = 
DependencyProperty.Register("CurrentItem", typeof(TypedMediaItem), typeof(LargeStreamItemsControl), new PropertyMetadata(null));
public TypedMediaItem CurrentItem 
{
    get { return (TypedMediaItem)GetValue(LargeStreamItemsControl.CurrentItemProperty); }
    set { SetValue(LargeStreamItemsControl.CurrentItemProperty, value); }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...