[英]Xamarin.Forms ListView set SelectedItem by Code
如何在我的代碼中設置 ListView 的SelectedItem
? 我的問題是,當我在我的代碼中預選一個項目時,它沒有突出顯示。 ListView 在 xaml 文件中定義。
<ListView ItemsSource="{Binding Items}" SelectedItem="{Binding SelectedItem}" />
我的視圖模型
class MyViewModel
{
List<MyItem> Items {get; set;}
MyItem SelectedItem { get; set; }
public MyViewModel()
{
Items = new List<MyItem>{ ... };
SelectedItem = Items.First();
}
}
但是當我顯示視圖時,它沒有突出顯示所選項目。 當我單擊某個項目時,它會突出顯示並正確設置。 我試過更改屬性,但這應該不會有影響,因為屬性是在構造函數中設置的。
為了在MyViewModel
屬性更改時更新視圖,該類必須實現INotifyPropertyChanged
。 這是一個例子:
public class MyViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
var handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
}
但是重要的是,您必須在設置器中調用OnPropertyChanged
,因此SelectedItem
屬性必須看起來像這樣:
MyItem _selectedItem;
MyItem SelectedItem {
get {
return _selectedItem;
}
set {
_selectedItem = value;
OnPropertyChanged("SelectedItem");
}
}
Xamarin格式中有關MVVM的很多很好的信息: 從數據綁定到MVVM
就我而言,就是這樣...(例如,自動選擇具有一個元素的第一個元素)
protected override async void OnAppearing()
{
if (MyList.Count == 1)
{
List_CheckPoint.SelectedItem = MyList[0];
}
}
您需要指定 xyz 綁定是雙向的。
SelectedItem="{Binding xyz, Mode=TwoWay}"
請注意,如果集合發生變化,您的選擇可能會取消選擇。 在我移動/重新排序我的收藏后,我總是將 xyz 設置回原始選擇。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.