c# - 在 ViewModel 中实施 iNotifypropertychanged 后 SelectedItem 不能在列表视图上工作
问题描述
您好我在 Xamarin Forms 中使用 MVVM。我正在尝试将我的 Listview 的 SelectedItem 绑定到我的 ViewModel。我绑定了它并且工作正常。但是当我实现 INotifyPropertyChanged 来更新其他一些组件的视图时,它停止工作。
即使在我的 ViewModel 中实现了 INotifyPropertyChanged,我也希望它能够工作。我正在弄清楚它为什么会发生的问题。我在互联网和 Xamarin 的文档上进行了搜索,但找不到原因。
我的观点
<ListView ItemsSource="{Binding PersonsList}"
CachingStrategy="RecycleElement"
HasUnevenRows="True"
SelectionMode="None"
SelectedItem="{Binding SelectedPerson}">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout Padding="5">
<Label Text="{Binding FullName}"
FontSize="Medium"
TextColor="Orange"/>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
视图模型
public class PersonViewModel : INotifyPropertyChanged
{
public PersonViewModel()
{
PersonsList = new ObservableCollection<User>
{
new User(){ UserId = 1, FullName = "John" },
new User(){ UserId = 2, FullName = "Alex" },
new User(){ UserId = 3, FullName = "Ellen" },
new User(){ UserId = 4, FullName = "Grace" }
};
}
public ObservableCollection<User> PersonsList { get; set; }
private User _selectedPerson { get; set; }
public User SelectedPerson
{
get { return _selectedPerson; }
set
{
if (_selectedPerson != value)
{
_selectedPerson = value;
OnPropertyChanged();
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName]string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
模型
public class User
{
public int UserId { get; set; }
public string FullName { get; set; }
}
希望能得到一些有用的建议。
解决方案
将您的属性更改SelectedPerson
为 call OnPropertyChanged()
。
private User _selectedPerson { get; set; }
public User SelectedPerson
{
get { return _selectedPerson; }
set
{
if (_selectedPerson != value)
{
_selectedPerson = value;
OnPropertyChanged();
}
}
}