如何在 ListView 中更改所选项目 属性
How to change selected item property in ListView
我需要在 ListView(Xamarin Forms) 中更改 selected 项目 属性。
List<Item> _source = new List<Item>();
_source.Add(new Item { Title = "First item" });
ListView.ItemsSource = _source;
我正在尝试更改 属性 我在列表中 select 编辑的项目。
Item item = ListView.SelectedItem as Item;
item.Title = "Changed title";
告诉我我做错了什么?
我也在尝试 select 一个带有索引的项目。由于 SelectedIndex 属性 丢失,我尝试这样做:
int selector = 1;
ListView.SelectedItem = _source[selector];
但是也没成功。
请帮帮我。
谢谢。
正如 Jason 所说,如果您想首先更改项目 属性,则需要为项目 class 实现 INotifyPropertyChanged 接口。
public class Item:ViewModelBase
{
private string _Title;
public string Title
{
get { return _Title; }
set
{
_Title = value;
RaisePropertyChanged("Title");
}
}
}
ViewModelBase 是实现 INotifyPropertyChanged 接口的 class。
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代表一个动态数据集合,当项目被添加、删除或整个列表被刷新时,它会提供通知.
最后,对 ListView 使用绑定并更改选定项 属性。
<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
我需要在 ListView(Xamarin Forms) 中更改 selected 项目 属性。
List<Item> _source = new List<Item>();
_source.Add(new Item { Title = "First item" });
ListView.ItemsSource = _source;
我正在尝试更改 属性 我在列表中 select 编辑的项目。
Item item = ListView.SelectedItem as Item;
item.Title = "Changed title";
告诉我我做错了什么? 我也在尝试 select 一个带有索引的项目。由于 SelectedIndex 属性 丢失,我尝试这样做:
int selector = 1;
ListView.SelectedItem = _source[selector];
但是也没成功。
请帮帮我。 谢谢。
正如 Jason 所说,如果您想首先更改项目 属性,则需要为项目 class 实现 INotifyPropertyChanged 接口。
public class Item:ViewModelBase
{
private string _Title;
public string Title
{
get { return _Title; }
set
{
_Title = value;
RaisePropertyChanged("Title");
}
}
}
ViewModelBase 是实现 INotifyPropertyChanged 接口的 class。
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代表一个动态数据集合,当项目被添加、删除或整个列表被刷新时,它会提供通知.
最后,对 ListView 使用绑定并更改选定项 属性。
<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