C# Xamarin ListView ObservableCollection未更新
我正在尝试用mvvm xamarin做一个项目 我有一个listview(以observablecollection为边界),在listview内部有一个按钮。单击此按钮,我在Observable集合中进行了一些更新。但是,直到我删除并再次插入可观察的集合,更新才会生效 这是密码C# Xamarin ListView ObservableCollection未更新,c#,xamarin,data-binding,C#,Xamarin,Data Binding,我正在尝试用mvvm xamarin做一个项目 我有一个listview(以observablecollection为边界),在listview内部有一个按钮。单击此按钮,我在Observable集合中进行了一些更新。但是,直到我删除并再次插入可观察的集合,更新才会生效 这是密码 <ListView ItemsSource="{Binding SalesList,Mode=TwoWay}"> <ListView.ItemTemplate>
<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}"/>
我不知道为什么会发生这个问题。
ADDOPERATION命令工作顺利(我在debuge模式下检查了它),但它没有更新listview。
当我将此代码添加到下面时,列表视图将更新。但是我想我遗漏了一些东西,因为当我在ObservableCollection中进行更改时,它会自动影响UI。只有在删除并再次插入相同的数据后,我才能执行此操作
SalesList.RemoveAt(index);
SalesList.Insert(index, cominginfo);
INotifyPropertyChanged事件的BaseViewModel类
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; }
}
提前感谢您需要在setters上调用
PropertyChanged
,以便通知UI值已更改
private double stockTotal;
public double StockTotal
{
get
{
return stockTotal;
}
set
{
stockTotal = value;
PropertyChanged("StockTotal");
}
}
SalesModel
需要实现INotifyPropertyChanged。ObservableCollection仅处理集合的添加和更改,而不处理集合中项目属性的更改。请参阅此帖子,在“简历”中:ObservableCollection仅在添加、删除、移动项目时通知,而不在项目更改时通知,因此,您需要对集合属性实施属性更改。您也可以将ItemSource设置为null,然后再返回到新值,但这并不理想。请编辑您的问题以包含任何相关代码,而不是将其填充到注释SalesModel继承BaseViewModel吗?有效。谢谢你,先生。我刚刚有了这个想法。最好的问候。顺便说一句,它只适用于一处房产。如果我添加PropertyChanged(“StockAmount”);它不起作用。应用程序崩溃。您是否为该属性添加了支持字段?如果它崩溃了,你做错了。现在没事了,谢谢你,先生。另一方面,我无法得到特定列的和。摘要属性不会更新,尽管ObservableCollection已更新。我更新了codeSUMMARY,它不是真实的属性,而是计算出来的。因此,每当设置StockTotal时,您应该提高PropertyChanged(“Summary”)。
private double stockTotal;
public double StockTotal
{
get
{
return stockTotal;
}
set
{
stockTotal = value;
PropertyChanged("StockTotal");
}
}