Связываемое свойство (список ) в формах Xamarin

#c# #xaml #xamarin #xamarin.forms #bindableproperty

#c# #xaml #xamarin #xamarin.forms #связываемое свойство

Вопрос:

моя проблема заключается в следующем: у меня есть my ContentPage , который имеет a ResourceDictionary с некоторыми DataTemplate s. Один из шаблонов принимает Horse объект (который содержит List<Weight> ‘s). Я отображаю несколько статистических данных этого объекта, но когда я хочу передать переменные из 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 .

Что я делаю не так?

Ответ №1:

Я понял, это работает. Кажется, вам нужно назначить свойство по событию изменения.

 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;
...
}
  

Комментарии:

1. Привет, рад, что нашел решение! Не забудьте отметить его, когда у вас будет время, это будет полезно для других людей, у которых такая же проблема.

Ответ №2:

Пожалуйста, попробуйте изменить IList на ObservableCollection.

Комментарии:

1. Спасибо за это предложение, какое это имеет значение? Возможно, я был неясен, свойство никогда не было установлено. Поэтому кажется, что он никогда не передает значения.