Xamarin.Forms ListView按代码设置SelectedItem

时间:2015-09-30 15:39:58

标签: android listview xamarin xamarin.forms selecteditem

如何在我的代码中设置ListView的SelectedItem?我的问题是,当我在我的代码中预选一个项目时,并没有突出显示。 ListView在xaml文件中定义。

<ListView ItemsSource="{Binding Items}" SelectedItem="{Binding SelectedItem}" />

我的ViewModel

class MyViewModel
{
    List<MyItem> Items {get; set;}
    MyItem SelectedItem { get; set; }

    public MyViewModel() 
    {
        Items = new List<MyItem>{ ... };
        SelectedItem = Items.First();
    }
}

但是当我显示视图时,它没有突出显示所选项目。当我点击某个项目时,它会突出显示并正确设置。我已经改变了属性,但这不应该有效果,因为属性在构造函数中设置正确。

2 个答案:

答案 0 :(得分:1)

为了让您的视图在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));
    }
}

但是重要你必须在你的setter中调用OnPropertyChanged,所以你的SelectedItem属性需要看起来像这样:

MyItem _selectedItem;
MyItem SelectedItem {
  get {
    return _selectedItem;
  }
  set {
    _selectedItem = value;
    OnPropertyChanged("SelectedItem");
  } 
}

Xamarin Forms中有关MVVM的大量有用信息:From Data Bindings to MVVM

答案 1 :(得分:0)

就我而言,这仅仅是...。(例如,自动选择具有一个元素的第一个元素)

 protected override async void OnAppearing()
{
    if (MyList.Count == 1)
                {
                    List_CheckPoint.SelectedItem = MyList[0];
                }
    }