Я использую:
- VS 2019
- Xamarin 16.1.0.545
- Xamarin Forms 4.1.0
I есть проект Xamarin Android, который работал до и после обновления VS, привязки ListView перестали работать.
У меня есть страница содержимого с этим списком:
<ListView x:Name="ListViewServicos" SelectionMode="None" ItemTapped="ListViewServicos_ItemTapped">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell Height="80">
<StackLayout Orientation="Vertical" Padding="10" Spacing="2" HeightRequest="80">
<StackLayout Orientation="Horizontal" VerticalOptions="StartAndExpand">
<Image Source="arrow" HorizontalOptions="Start"></Image>
<Label Text="{Binding Tipo}" TextColor="Black" HorizontalOptions="StartAndExpand"/>
<StackLayout Orientation="Horizontal" HorizontalOptions="EndAndExpand" WidthRequest="100">
<Label Text="{Binding MargemTotalFormatada}" TextColor="#555555" HorizontalOptions="EndAndExpand"/>
</StackLayout>
</StackLayout>
<StackLayout Orientation="Horizontal" VerticalOptions="StartAndExpand">
<StackLayout Orientation="Horizontal" HorizontalOptions="StartAndExpand">
<Label Text="Uso:" TextColor="#555555" HorizontalOptions="StartAndExpand"/>
<Label Text="{Binding MargemUtilizadaFormatada}" TextColor="#555555" HorizontalOptions="EndAndExpand"/>
</StackLayout>
<StackLayout Orientation="Horizontal" HorizontalOptions="EndAndExpand">
<Label Text="Disponível:" TextColor="#555555" HorizontalOptions="StartAndExpand" FontAttributes="Bold"/>
<Label Text="{Binding MargemFormatada}" TextColor="#555555" HorizontalOptions="EndAndExpand" FontAttributes="Bold"/>
</StackLayout>
</StackLayout>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
Я установил ItemsSource в такие .cs (в методе LoadServicesList, вызываемом внутри OnAppearing):
protected override void OnAppearing()
{
base.OnAppearing();
BindingContext = this;
ConfigureScreen();
LoadServicesList();
servico = User.Servicos.First();
LoadService(servico);
}
public void LoadServicesList()
{
ListViewServicos.RowHeight = 80;
ListViewServicos.HeightRequest = User.Servicos.Count() * 80;
ListViewServicos.ItemsSource = User.Servicos;
}
User is stati c, а 'Servicos' - это список 'Servico':
public static class User
{
public static List<Servico> Servicos { get; set; }
А вот класс 'Servico':
public class Servico
{
public string Tipo { get; set; }
public double Margem { get; set; }
public string MargemFormatada { get; set; }
public double MargemUtilizada { get; set; }
public string MargemUtilizadaFormatada { get; set; }
public string MargemTotalFormatada { get; set; }
public string Color { get; set; }
public List<Margem> Margens { get; set; }
public Servico(string tipo, double margem, double margemUtilizada)
{
this.Tipo = tipo;
Margem = margem;
MargemUtilizada = margemUtilizada;
MargemFormatada = string.Format(new CultureInfo("pt-BR"), "{0:C}", margem);
MargemUtilizadaFormatada = string.Format(new CultureInfo("pt-BR"), "{0:C}", margemUtilizada);
MargemTotalFormatada = string.Format(new CultureInfo("pt-BR"), "{0:C}", margem + margemUtilizada);
}
}
Самая странная часть всего этого заключается в том, что отображается только свойство «Tipo», другие привязки просто не отображаются (да, я ' проверил, и у них есть значения).
Я долго искал решение, но пока у меня ничего не работало. Я очень признателен, если кто-нибудь может мне помочь. Спасибо!
Ps: Я уже пробовал добавить "BindingContext = this;" после InitializeComponent (), но ничего не изменилось.
UPDATE:
Я только что обнаружил, что работает только свойство «Tipo» Servico, потому что в другой части кода я звонил User.Servicos.First (). Tipo. Похоже, что он будет отображаться в привязке списка только в том случае, если свойство get было вызвано ранее. Это супер странно.
Таким образом, обходной путь - l oop через User.Servicos и вызов всех свойств, которые я буду использовать в Listview:
string x = servico.MargemTotalFormatada;
string y = servico.MargemUtilizadaFormatada;
string w = servico.MargemFormatada;
С этим кодом привязки ListView работают. Это супер безобразно и неправильно, но я заставил это работать.