c# - 在 ViewModel SelectedItem 中实现 iNotifypropertychanged 后,在 listview 上不起作用

标签 c# .net xamarin mvvm xamarin.forms

您好我在 Xamarin Forms 中使用 MVVM。我正在尝试将我的 Listview 的 SelectedItem 绑定(bind)到我的 ViewModel。我绑定(bind)了它并且工作正常。但是当我实现 INotifyPropertyChanged 来更新其他一些组件的 View 时,它停止工作。

即使在我的 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属性(property)电话OnPropertyChanged() .

private User _selectedPerson { get; set; }
public User SelectedPerson
{
    get { return _selectedPerson; }
    set
    {
        if (_selectedPerson != value)
        {
            _selectedPerson = value;
            OnPropertyChanged();
        }
    }
}

关于c# - 在 ViewModel SelectedItem 中实现 iNotifypropertychanged 后,在 listview 上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61661086/

相关文章:

c# - 重复序列化和反序列化创建重复项

c# - 如何使用 asp.net 将 gridview 图像和数据导出为 PDF 或使用 asp.net 将 gridview 数据导出为 PDF

c# - .NET 2.0 的 TimeZoneInfo.ConvertTime 等效项?

android - SignalR 将在 android 应用程序和支持 Websocket 的 IIS 服务器之间使用哪种传输?

c# - 如何在 Xamarin.Forms 的网格中启用边框

c# - 如何为 OpenApi header 设置字符串列表

c# - 在父 View 中显示子项的验证 asp.net mvc 3

c# - 我如何为我的 Windows Mobile 5 应用程序创建数据库并访问它?

c# - 更改列表中列表中每个字符串项的值

android - 是否可以通过 Xamarin Forms 项目访问在 ANDROID 项目中编码的自定义控件?