Xamarin Forms 中的 BindableProperty (List<>)

BindableProperty (List<>) in Xamarin Forms

我的问题如下: 我的 ContentPage 有一个 ResourceDictionary 和一些 DataTemplate秒。其中一个模板采用 Horse 对象(其中包含 List<Weight>)。 我显示了该对象的几个统计数据,但是当我想将变量从 Horse 对象传递到另一个视图时,如下所示:

<graph:LineGraph x:Name="displayWeight" WeightOfHorse="{Binding Weight}"/>

代码隐藏 WeightOfHorse:

public static readonly BindableProperty WeightOfHorseProperty = BindableProperty.Create(
    nameof(WeightOfHorse),
    typeof(IList<Weight>),
    typeof(LineGraph),
    defaultBindingMode: BindingMode.TwoWay);

public IList<Weight> WeightOfHorse
{
    get => (IList<Weight>)GetValue(WeightOfHorseProperty);
    set => SetValue(WeightOfHorseProperty, value);
}

我只是没能传递这些值,我知道它们是可用的,因为我可以在一个简单的 Collectionview.

中显示它们

我做错了什么?

请尝试将 IList 更改为 ObservableCollection。

我明白了,这行得通。看来你需要通过改变事件来分配属性。

public static readonly BindableProperty WeightOfHorseProperty = BindableProperty.Create(
nameof(WeightOfHorse),
typeof(IEnumerable<Weight>),
typeof(LineGraph),
defaultBindingMode: BindingMode.TwoWay,
propertyChanged: OnEventNameChanged);

public IEnumerable<Weight> WeightOfHorse
{
get => (IEnumerable<Weight>)GetValue(WeightOfHorseProperty);
set => SetValue(WeightOfHorseProperty, value);
}

static void OnEventNameChanged(BindableObject bindable, object oldValue, object newValue)
{
var control = (LineGraph)bindable;
control.WeightOfHorse = (List<Weight>)newValue;
...
}