【发布时间】:2020-08-22 22:39:06
【问题描述】:
您好,我在 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; }
}
希望得到一些有用的建议。
【问题讨论】:
-
你的 setter 都没有调用 PropertyChanged,所以你并没有真正使用 INPC。
-
我更新了我的问题。我已经添加了属性更改,但它仍然没有检测到所选项目。
标签: c# .net xamarin mvvm xamarin.forms