Data.Binding类型的对象无法转换为MyCustomType类型

时间:2014-10-20 17:42:52

标签: c# xaml silverlight binding

可能是非常简单的事情,但无法弄清楚为什么我会收到这个错误..

Object of type 'System.Windows.Data.Binding' cannot be converted to type 'System.Collections.ObjectModel.ObservableCollection[IDATT.Infrastructure.Controls.Map.IMapLayerItem]'.

我正在处理自定义控件并尝试设置可绑定属性。错误发生在下面的XAML行: enter image description here

来自IdattMap

的代码段
public static readonly DependencyProperty LayersProperty =
            DependencyProperty.Register("Layers", typeof(List<IdattMapLayer>), typeof(IdattMap), new PropertyMetadata(null));

        public List<IdattMapLayer> Layers
        {
            get { return GetValue(LayersProperty) as List<IdattMapLayer>; }
            set { this.SetValue(LayersProperty, value); }
        }

IdattMapLayer的代码片段:

public class IdattMapLayer
    {
        public ControlTemplate ControlTemplate { get; set; }

        public ObservableCollection<IMapLayerItem> MapItemsDataSource { get; set; }

        public static readonly DependencyProperty MapItemsDataSourceProperty =
            DependencyProperty.Register("MapItemsDataSource", typeof(ObservableCollection<IMapLayerItem>), typeof(IdattMap), new PropertyMetadata(OnMapItemsDataSourceChanged));


        private static void OnMapItemsDataSourceChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
        {
            var control = sender as IdattMap;
            if (control == null || control.MapControl == null) return;
        }
    }

.. MappedData绑定到VM及其ObservableCollection<IMapLayerItem>类型。

为什么期望&#34;绑定&#34;对象和传递可观察的碰撞不起作用?

1 个答案:

答案 0 :(得分:0)

绑定不能很好地处理接口,因为在执行绑定所需的幕后使用反射需要一定的层次结构才能使它全部工作。

将控件MapItemsDataSource依赖项属性更改为可观察集合,其中包含符合相关接口的实际实例。

目前还不清楚Silverlight的最新版本是否有所改变,但有人为此线程上的S4编写了一个动态绑定包装器。

Binding to an interface where the implementation class is internal. (Silverlight 3)