我正在使用 Xamarin Forms 和 MVVMLight。
所以我用 ListView 替换了一个“病人”列表。ListView 的每个元素都有一个删除按钮。单击时,从列表中删除患者,并使用 RaisePropertyChanged() 通知视图。
现在的问题是,当我添加多个患者然后想删除一个时。总是在视图中删除最后一个。我调试了应用程序,发现正确的应用程序已从我的列表中删除。但是当视图更新它的数据时,总是最后一个条目被删除。
<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 之后,错误是元素在视图中被删除了。总是最后一个甚至很难我在列表中删除另一个。