Gente, estou com o seguinte problema: Tenha uma listview. que em função do item clicado, eu tenho que fazer uma modificação na própria lista; depois de fazer a alteração na lista a listview não é atualizada, permanecendo a informação anterior. Segue o código Classe com a definição padrão o PropertyChange
public class BaseTelaModelo : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged([CallerMemberName]string name = "")
{
if (PropertyChanged != null)
PropertyChanged.Invoke(this, new PropertyChangedEventArgs(name));
}
}
Classe (herdando da Classe padrão do PropertyChange
public class BaseObservable : BaseTelaModelo
{
public int Id { get; set; }
public string Nome { get; set; }
}
Xaml:
<ListView
x:Name="lisHorario" SelectedItem="{Binding ClicHorario}" ItemsSource="{Binding Horarios, Mode=TwoWay}"
SeparatorVisibility="Default" SeparatorColor="{Binding CorBotao}">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<ViewCell.View>
<StackLayout Orientation="Horizontal" BackgroundColor="White" HorizontalOptions="FillAndExpand"
VerticalOptions="Center">
<StackLayout Orientation="Vertical" >
<Label Text="{Binding Nome}"></Label>
</StackLayout>
</StackLayout>
</ViewCell.View>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
Code Behind
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
this.BindingContext = new MainPageMVVM();
}
protected override void OnAppearing()
{
base.OnAppearing();
MainPageMVVM a = new MainPageMVVM();
MessagingCenter.Subscribe<BaseObservable>(this, "Insere",
(msg) =>
{
lisHorario.SelectedItem = null;
DisplayAlert("Insere", "Teste", "OK");
});
MessagingCenter.Subscribe<BaseObservable>(this, "Altera",
async (msg) =>
{
lisHorario.SelectedItem = null;
MessagingCenter.Unsubscribe<BaseObservable>(this, "Altera");
var resposta = await DisplayActionSheet("", "Voltar", null, "Mudar 1", "Mudar 2", "Mudar 3");
switch (resposta)
{
case "Mudar 1": a.Altera1(); break;
case "Mudar 2": a.Altera2(); break;
}
});
}
}
Classe MVVM
public class MainPageMVVM : BaseObservable
{
private ObservableCollection<BaseObservable> h = new ObservableCollection<BaseObservable>();
public ObservableCollection<BaseObservable> H
{ get { return h; }
Set { h = value; OnPropertyChanged(); }
}
private BaseObservable clicH;
public BaseObservable ClicH
{ get { return clicH; }
set { clicH = value;
if (clicH != null)
{
if (clicH.Nome == "Branco")
{
MessagingCenter.Send(clicH, "Insere");
}
else
{
MessagingCenter.Send(clicH, "Altera");
}
}
}
}
public MainPageMVVM()
{
BaseObservable basep = new BaseObservable();
basep.Nome = "Nome 1";
basep.Id = 1;
H.Add(basep);
basep = new BaseObservable();
basep.Nome = "Branco";
basep.Id = 2;
H.Add(basep);
basep = new BaseObservable();
basep.Nome = "Nome 2";
basep.Id = 1;
H.Add(basep);
}
public void Altera1()
{
H.Clear(); BaseObservable basep = new BaseObservable();
basep.Nome = "Alterado Nome 1"; basep.Id = 1;
H.Add(basep);
basep = new BaseObservable();
basep.Nome = "Branco"; basep.Id = 2;
H.Add(basep);
basep = new BaseObservable();
basep.Nome = "Nome 2"; basep.Id = 1;
H.Add(basep);
}
Alguém pode me ajudar? Grato