silverlight - 在 Silverlight 中绑定(bind)用户控件的属性

标签 silverlight data-binding mvvm

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

我需要一种通过绑定(bind)将当前对象传递给我的用户控件的方法。

我试图在用户控件上创建一个公共(public)属性,如下所示:

public TypedMediaItem CurrentItem { get; set; }

并设置绑定(bind)参数:
<my:LargeStreamItemControl Height="160" Width="295" CurrentItem="{Binding }" />

但是,这给了我以下错误:

“System.Windows.Data.Binding”类型的对象无法转换为“F1MediaCentre.Classes.Payload.Typed.TypedMediaItem”类型。

我不确定我哪里出错了——我是 Silverlight 的新手,从一位前同事那里继承了一个现场制作应用程序,并且正在为这个应用程序绞尽脑汁。

最佳答案

我会对此进行尝试...您可能无法绑定(bind)到它,因为它不是依赖属性。

将此添加到您的用户控件以代替当前的 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# :)

这将使它成为一个依赖属性,因此您将能够绑定(bind)到它。

好的,这里是 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); }
}

关于silverlight - 在 Silverlight 中绑定(bind)用户控件的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9231510/

相关文章:

c# - 多音频,直播流畅

c# - WPF MVVM 创建多个数据网格并将项目绑定(bind)到它们

c# - 防止在数据网格上添加空白行

c# - 列表框项目方向为水平

Silverlight:打破绑定(bind)错误

silverlight - 您如何处理 Silverlight 中的验证?

c# - 将命令绑定(bind)到 UserControl 内的 ViewModel

c# - 我可以以某种方式暂时禁用 WPF 数据绑定(bind)更改吗?

c# - winforms 数据绑定(bind)仅适用于开发机器

jquery - Angular2如何获取所有选中的复选框