после реализации iNotifypropertychanged в ViewModel SelectedItem не работает со списком - PullRequest
0 голосов
/ 07 мая 2020

Здравствуйте, я использую MVVM в Xamarin Forms. Я пытаюсь привязать SeletedItem моего Listview к моей ViewModel. Я связал его и работал нормально. но когда я реализовал INotifyPropertyChanged для обновления представления для какого-то другого компонента, он перестал работать.

Я хочу, чтобы он работал, даже если INotifyPropertyChanged реализован в моей ViewModel. Я выясняю, почему это произошло. Я искал в документации inte rnet и Xamarin и не смог найти причину.

My View

<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>

ViewModel

 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; }
}

Надеюсь получить полезный совет.

1 Ответ

3 голосов
/ 07 мая 2020

Измените свойство SelectedPerson на OnPropertyChanged().

private User _selectedPerson { get; set; }
public User SelectedPerson
{
    get { return _selectedPerson; }
    set
    {
        if (_selectedPerson != value)
        {
            _selectedPerson = value;
            OnPropertyChanged();
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...