Как сказал Джейсон, вам необходимо реализовать интерфейс INotifyPropertyChanged для класса Item, если вы хотите сначала изменить свойство Item.
public class Item:ViewModelBase
{
private string _Title;
public string Title
{
get { return _Title; }
set
{
_Title = value;
RaisePropertyChanged("Title");
}
}
}
ViewModelBase - это класс, реализующий INotifyPropertyChanged interface.
public class ViewModelBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void RaisePropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
Затем я предлагаю вам использовать ObservableCollection для замены List, потому что Observablecollection представляет динамическую c коллекцию данных, которая предоставляет уведомления при добавлении элементов, удален, или когда весь список обновлен.
Наконец, используя привязку для ListView и изменив свойство selecteditem.
<StackLayout>
<ListView x:Name="listview1" ItemsSource="{Binding source}">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Label Text="{Binding Title}" />
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
<Button
x:Name="btn1"
Clicked="btn1_Clicked"
Text="update data" />
</StackLayout>
public partial class Page18 : ContentPage
{
public ObservableCollection<Item> source { get; set; }
public Page18()
{
InitializeComponent();
source = new ObservableCollection<Item>()
{
new Item(){Title="title 1"},
new Item(){Title="title 2"},
new Item(){Title="title 3"},
new Item(){Title="title 4"},
new Item(){Title="title 5"}
};
this.BindingContext = this;
}
private void btn1_Clicked(object sender, EventArgs e)
{
Item item = listview1.SelectedItem as Item;
item.Title = "Changed title";
}
}
О привязке и INotifyPropertyChanged, пожалуйста, посмотрите:
https://docs.microsoft.com/en-us/xamarin/xamarin-forms/xaml/xaml-basics/data-bindings-to-mvvm