正如 Jason 所说,如果要先更改 Item 属性,则需要为 Item 类实现 INotifyPropertyChanged 接口。
public class Item:ViewModelBase
{
private string _Title;
public string Title
{
get { return _Title; }
set
{
_Title = value;
RaisePropertyChanged("Title");
}
}
}
ViewModelBase 是实现 INotifyPropertyChanged 接口的类。
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代表了一个动态的数据集合,当item被添加、删除或者整个list刷新时提供通知。
最后,使用 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";
}
}
关于Binding和INotifyPropertyChanged,请看:
https://docs.microsoft.com/en-us/xamarin/xamarin-forms/xaml/xaml-basics/data-bindings-to-mvvm