簡體   English   中英

Xamarin.Forms ListView通過代碼設置SelectedItem

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM