У меня есть <List>
, который добавляет и удаляет элементы, вызывая модальное значение из <Button>
, как показано на рисунке.
![List](https://i.stack.imgur.com/7SJc2.png)
При поднятии модальных я показываю пользователю элементы, которые могут быть связаны с основным списком, а также с помощью <Switch>
указывает, добавлены ли эти элементы или нет, с целью, чтобы при нажатии переключателя добавлять или удалять элементы из основногоlist
![Modal](https://i.stack.imgur.com/sYXbO.png)
Проблема заключается в том, что при поднятии модала выполняется метод, который добавляет и удаляет элементы в список, и каждый раз, когда я поднимаюмои записи дублируются, как показано на рисунке
![Duplicated](https://i.stack.imgur.com/23TAR.png)
Это связано с тем фактом, что при поднятии модальноговыполняется удаление химикатов, это вызывается каждый раз, когда значение свойства, связанное с <Switch>
в представлении, изменяется
Почему это происходит? Как я могу избежать этого?
Затем я представляю свой код ...
MODAL.XAML:
<StackLayout
BindingContext="{Binding AgregarSustancia}">
<ListView
ItemsSource="{Binding ListaSustancias}"
SelectedItem="{Binding SelectedSustancia}">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout>
<StackLayout Orientation="Vertical">
<Label Text="{Binding NombreSustancia}"
HorizontalOptions="FillAndExpand"
VerticalOptions="CenterAndExpand"/>
</StackLayout>
<Switch
OnColor="{StaticResource das.color.verde}" HorizontalOptions="EndAndExpand"
VerticalOptions="Start"
IsToggled="{Binding SustanciaAsociada, Mode=OneWay}">
</Switch>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
<StackLayout/>
AGREGARSUSTANCIA.CS:
bool sustanciaAsociada;
[JsonProperty(PropertyName = "chemicalIsAssociateWithInstallation")]
public bool SustanciaAsociada
{
get
{
return sustanciaAsociada;
}
set
{
if (value != sustanciaAsociada)
{
sustanciaAsociada = value;
AsociarDesasociar(sustanciaAsociada);
}
}
}
//METHOD THAT ADDS OR ELIMINATES DEPENDING ON THE VALUE OF THE PARAMETER
private async void AsociarDesasociar(bool sustanciaAsociada)
{
//ADD TO LIST
if (sustanciaAsociada)
{
}
else //REMOVE TO LIST
{
}
}
Тогда мой ViewModel, заполняющий модальный список
VIEWMODEL.CS: (MODAL)
#region Constructor
public AgregarSustanciaViewModel(ObservableCollection<AgregarSustancia> listaAgregarSustancia)
{
navigationService = new NavigationService();
ListaSustancias = new ObservableCollection<AgregarSustancia>();
listaSustanciasAux = new List<AgregarSustancia>(listaAgregarSustancia);
ListaSustancias = listaAgregarSustancia;
}
#endregion
Как я могу предотвратить метод AsociarDesasociar()
в свойстве Get-Set коммутатораот выполнения модального? Как я могу инкапсулировать этот метод? Любая помощь для меня?