Xamarin ListView ObservableCollection не обновляется - PullRequest
0 голосов
/ 19 марта 2020

я пытаюсь сделать проект с mvvm xamarin.

У меня есть просмотр списка (ограничен наблюдаемой коллекцией), а внутри просмотра списка у меня есть кнопка. нажав эту кнопку, я делаю некоторые обновления в коллекции Observable. Но обновления не действуют до тех пор, пока я не удалю и снова не вставлю коллекцию Observable.

вот код


 <ListView ItemsSource="{Binding SalesList,Mode=TwoWay}">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell IsEnabled="True"    >

                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*"/>
                                <ColumnDefinition Width="*"/>
                                <ColumnDefinition Width="*"/>
                            </Grid.ColumnDefinitions>


                            <Label FontSize="Large" Text="{Binding StockTotal}"/>

                            <Button Text="+"     Grid.Column="1"  CommandParameter="{Binding .}"   Command="{Binding Path=BindingContext.ADDOPERATION,    Source={x:Reference Mypage}}"  />

                            <Entry Text="{Binding StockAmount}"  Grid.Column="2" />

                        </Grid> 
                    </ViewCell>
                </DataTemplate>  
            </ListView.ItemTemplate> 
        </ListView>

    <Label Text="{Binding SUMMARY}"/>




 public ICommand ADDOPERATION { get; set; }
        public HomeVM()
        {

            SalesList.Add(new SalesModel { StockAmount = 1 });
            SalesList.Add(new SalesModel { StockAmount = 2 });
            SalesList.Add(new SalesModel { StockAmount = 3 });

            ADDOPERATION = new Command(MYADDOPERATION);
        }
        private void MYADDOPERATION(object obj)
        {
            if (obj == null) return;

            var cominginfo = (SalesModel)obj;


            var index= SalesList.IndexOf(cominginfo);


            cominginfo.StockAmount++;

            cominginfo.StockTotal = cominginfo.StockAmount * 55;

 }


 private double _SUMMARY; 
        public double SUMMARY
        {
            get { return SalesList.Sum(c => c.StockTotal); }
            set
            {
                _SUMMARY = SalesList.Sum(c=>c.StockTotal);
                INotifyPropertyChanged();
            }
        }

Я не знаю, почему возникла эта проблема. команда ADDOPERATION работает успешно (я проверил ее в режиме отладки), но она не обновляет представление списка. Обновления представления списка, когда я добавляю этот код ниже. Но я думаю, что я что-то упустил, потому что, когда я делаю изменения внутри ObservableCollection, это должно автоматически влиять на пользовательский интерфейс. Я могу сделать это только после того, как удалю и снова вставлю те же данные.

            SalesList.RemoveAt(index);

            SalesList.Insert(index, cominginfo); 

класс BaseViewModel для события INotifyPropertyChanged

  public class BaseViewModel : INotifyPropertyChanged
    { 
        public event PropertyChangedEventHandler PropertyChanged;
        protected void INotifyPropertyChanged([CallerMemberName] string propertyName = "")
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }

мой класс модели

 public class SalesModel:BaseViewModel
    {

        public double StockTotal { get; set; } 
        public string StockName { get; set; }
        public double StockAmount { get; set; }
    }

Заранее спасибо

1 Ответ

1 голос
/ 20 марта 2020

вам нужно вызвать PropertyChanged на установщиках, чтобы уведомить пользовательский интерфейс об изменении значения

private double stockTotal;
public double StockTotal 
{ 
  get
  {
    return stockTotal;
  }
  set 
  {
     stockTotal = value;
     PropertyChanged("StockTotal");
  }
}
...