在Silverlight中绑定用户控件的属性

时间:2012-02-10 16:51:36

标签: silverlight data-binding mvvm

我有一个我创建的用户控件。 它在列表框的DataTemplate中使用。 列表框绑定到可观察的自定义对象集合。

我需要一种方法通过绑定将当前对象传递给我的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 个答案:

答案 0 :(得分:3)

我会对此嗤之以鼻......你可能无法绑定它,因为它不是依赖属性。

将其添加到您的用户控件中以代替您当前的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); }
}