ListView에서 배우는 컬렉션의 Bind 알림
9496 단어 XamarinC#Xamarin.Forms
ListView 구현
우선은 최소 구성으로 ListView를 구현.
MyNote.xaml
<ListView x:Name="lstMemo">
<ListView.ItemTemplate>
<DataTemplate>
<ImageCell Text="{Binding Title}"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
MyNote.xaml.cs
public partial class MyNotePage : ContentPage
{
private List<MemoData> memos;
public MyNotePage()
{
InitializeComponent();
// データを設定
memos = new List<MemoData>();
for (int i = 0; i < 10; i++)
{
MemoData memo = new MemoData();
memo.Title = "title" + i.ToString();
memos.Add(memo);
}
// リストビューのソースに設定
lstMemo.ItemsSource = memos;
}
}
public class MemoData
{
public string Title
{
get;
set;
}
}
실행하면 다음 화면이 표시됩니다.
컬렉션이 변경된 경우의 바인드 통지
확인용 버튼을 구현하고 컬렉션에 레코드를 추가해 봅니다.
<Button x:Name="btnListAdd" Text="リスト追加" />
// ボタンイベント
btnListAdd.Clicked += (sender, e) => {
memos.Add(new MemoData() { Title = "NewData" });
};
이 상태에서 실행 버튼을 누르더라도
목록에 추가되지 않습니다.
컬렉션의 요소를 동적으로 바인드 알림을 받으려면 ObservableCollection을 사용합니다.
List → ObservableCollection으로 변경하는 것만으로 OK입니다.
//private List<MemoData> memos;
private ObservableCollection<MemoData> memos;
//memos = new List<MemoData>();
memos = new ObservableCollection<MemoData>();
다시 빌드하고 확인하면 이번에는 목록에 추가됩니다.
컬렉션의 항목 요소가 변경될 때 바인딩 알림
컬렉션 내부의 요소를 업데이트해 봅니다.
<Button x:Name="btnItemUpdate" Text="要素更新" />
btnItemUpdate.Clicked += (sender, e) => {
memos[0].Title = memos[0].Title + "update";
};
버튼을 클릭해 보겠습니다만, 갱신은 되지 않습니다.
컬렉션의 요소를 동적으로 바인딩 알림을 보내는 경우,
설정하고 있는 클래스에 친숙한 변경 통지 이벤트를 설정할 필요가 있습니다.
public class MemoData : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private string title;
public string Title
{
get{ return this.title; }
set{
if (title != value)
{
title = value;
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(nameof(Title)));
}
}
}
}
}
다시 빌드하고 실행하면 Bind 알림이 이루어지는 것을 확인할 수 있습니다.
Reference
이 문제에 관하여(ListView에서 배우는 컬렉션의 Bind 알림), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/furugen/items/18bd2a521d1fa9927212텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)