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;
...
}
我的问题如下:
我的 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;
...
}