У меня есть страница содержания «AnimalPage» с ярлыками. Я хочу привязать label.Text к свойствам класса, чтобы метки автоматически обновлялись по мере изменения значений свойств.Как привязать ярлык к свойству в Xamarin?
Класс «Animal», который имеет два свойства, обхват & длина. При изменении значения третье свойство «вес» рассчитывается автоматически (примечание: код, который запускает расчет, не показан ниже). Когда изменяется свойство , я хочу автоматически обновить ярлык на странице содержимого.
Многие из примеров, которые я нашел на Xamarin, - это XAML, которые я не использую.
В настоящий момент, когда страница загружается, на ярлыке Weight отображается начальное значение, поэтому похоже, что привязка верна, но когда свойство веса изменяется, метка не обновляется.
Я установил контрольные точки в коде и вызывается метод calcWeight и свойство веса изменяется, но weightCell.cellText не изменяется.
Что мне не хватает?
public class Animal {
public string Name { get; set; }
private double _girth;
// when girth changes, save the value and trigger a re-calculation of weight
public double girth { get { return _girth; } set { _girth = value; this.calcWeight(); } }
private double _length;
// same for length changes; save the value and trigger a re-calculation of weight
public double length { get { return _length; } set { _length = value; this.calcWeight(); } }
private double _weight;
public double weight { get { return _weight; } set { _weight = value; } }
public Animal()
{
...
}
...
public double calcWeight()
{
// formula for weight calculation goes here...
...
this.weight = weight;
return weight;
}
}
страница, которая отображает этот класс выглядит следующим образом:
internal class AnimalPage : ContentPage
{
private Animal animal { get; set; }
public AnimalPage(Animal animal)
{
this.animal = animal;
BindingContext = this.animal;
var weightCell = new ResultCell(); // ResultCell is a custom ViewCell
Binding myBinding = new Binding("weight");
myBinding.Source = this.animal;
weightCell.cellText.SetBinding(Label.TextProperty, myBinding);
...
}
}
Для полноты картины, вот это класс ResultCell который просто обычай ViewCell с двумя метками отображается горизонтально.
public class ResultCell : ViewCell {
public Label cellLabel, cellText;
public ResultCell() {
cellLabel = new Label();
cellText = new Label();
var cellWrapper = new StackLayout {
...
Children = { cellLabel, cellText }
};
View = cellWrapper;
}
}
Да, это сработало. Я пошел на примере здесь: https://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged(v=vs.110).aspx Это имеет смысл, но я видел примеры Xamarin, где они не наследуются от INotifyPropertyChanged и все еще работают, поэтому я очень смущен. Единственное, о чем я могу думать, это то, что они, должно быть, унаследовали от класса Xamarin, который уже реализовал это. – IamJohnny45