我正在使用Xamarin Forms和MVVMLight。
所以我用ListView取代了“患者”列表。 ListView的每个元素都有一个删除按钮。单击时,患者将从列表中删除,并通过RaisePropertyChanged()通知视图。
现在的问题是当我添加多个患者然后想要删除一个。始终在视图中删除最后一个。我调试了应用程序,看到正确的应用程序从我的列表中删除。但是当View更新其数据时,总是删除最后一个条目。
<ListView ItemsSource="{Binding Patients}" HasUnevenRows="true" x:Name="Patientlist">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<ViewCell.View>
<StackLayout Orientation="Horizontal" VerticalOptions="FillAndExpand">
<StackLayout HorizontalOptions="FillAndExpand">
<Label Text="Patient" Style="{DynamicResource TitleStyle}"/>
<Label Text="Benötigte Proben"/>
<Label Text="Untersuchungen"/>
<Button Text="Bearbeiten" />
</StackLayout>
<StackLayout HorizontalOptions="FillAndExpand">
<Label Text="{Binding PatientID}"/>
<Label Text="Test"/>
<Label Text="Test"/>
<Button Text="Löschen" Command="{Binding DelCMD}"/>
</StackLayout>
</StackLayout>
</ViewCell.View>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
所以这是我的ListView。按钮“Löschen”是删除按钮。它执行以下命令:
private RelayCommand delCMD;
public RelayCommand DelCMD
{
get
{
return delCMD ?? (delCMD = new RelayCommand (()=>Messenger.Default.Send<PatientM> (this, "delPat")));
}
}
此代码位于我的PatientModel-Class中。并向移除元素的VM发送消息。
public void delPatient(PatientM Patient)
{
Patients.Remove (Patient);
RaisePropertyChanged ("Patientlist");
}
然后在VM中执行此代码。像我说的那样,正确的患者从列表中移除(Patients.Remove)。但是在调用RaisePropertyChanged之后错误的是在视图中删除了元素。总是最后一个甚至很难我在列表中删除了另一个。