当Binding Collection of Colours System.ArgumentException出现时

时间:2018-01-17 07:30:15

标签: xaml xamarin collections binding xamarin.forms

我在Xamarin.Forms的PCL项目中有一个自定义视图。我无法将Xaml中的颜色集合绑定到CustomView中的可绑定对象。

我在xaml中设置了如下所示的绑定:

<local:CustomView x:Name="customView"  ColorPalette="{Binding Colors}"/>

我的自定义视图如下:

public class CustomView : View
{
    public CustomView()
    {

    }

    public static void OnColorsChanged(BindableObject bindable, object oldValue, object newValue)
    {
        // Some Code
    }

    public static readonly BindableProperty ColorsPaletteProperty =
        BindableProperty.Create("ColorPalette", typeof(IEnumerable<Color>), typeof(CustomView), new List<Color>(){ Color.FromRgb(0, 0, 0),
            Color.FromRgb(251, 176, 59)}, BindingMode.Default, null, OnColorsChanged);

    public IEnumerable<Color> ColorPalette
    {
        get { return (IEnumerable<Color>)GetValue(ColorsPaletteProperty); }
        set { SetValue(ColorsPaletteProperty, value); }
    }
}

在Xaml中执行绑定时,我得到一个异常“System.ArgumentException:'Xamarin.Forms.Binding'类型的对象'无法转换为'Xamarin.Forms.Color'类型。”

但是当我在代码中使用SetBinding绑定Colors时它正常工作。

代码背后:

 //Binding using SetBinding is working where as {Binding Colors} in xaml is not working

customView.SetBinding<ViewModel>(CustomView.ColorsPaletteProperty, vm => vm.Colors);

Colors是IEnumerable / IList / List / ObservableCollection类型的颜色集合。

感谢任何帮助。

此致

尼蒂什

2 个答案:

答案 0 :(得分:0)

嵌入在另一个视图中的自定义视图将继承父视图的绑定上下文。您是否将视图的绑定上下文设置为具有Colors属性的viewmodel?您在其中设置绑定上下文和viewmodel的更多代码示例可能会有所帮助。

答案 1 :(得分:0)

您的属性名称是ColorPalette,但您的可绑定属性名称未遵循标准,它应该像“ColorPaletteProperty”而不是“ColorsPaletteProperty”您在“颜色”中添加了“s”,这是错误的。你可以删除它并检查吗?它应该工作,让我知道这是否有帮助。

谢谢, 迈克尔