я пытаюсь сделать проект с 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; }
}
Заранее спасибо