如何从 ViewModel 中删除方法的执行 - Xamarin.Forms - MVVM

How to remove the execution of a method from a ViewModel - Xamarin.Forms - MVVM

我有一个 <List>,它通过从 <Button> 调用模态来添加和删除元素,如图所示。

提升模式时,我向用户显示可以与主列表相关联的元素,并且还用 <Switch> 指示是否添加这些元素,用 objective 表示按下开关时从主列表中添加或删除元素

问题是,当模态提升时,执行了向列表中添加和删除元素的方法,每次提升模态时,我的记录都是重复的,如图

这是因为在提升模态时,会执行添加或删除化学品的方法,每次调用绑定到<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: (模态)

  #region Constructor
        public AgregarSustanciaViewModel(ObservableCollection<AgregarSustancia> listaAgregarSustancia)
        {
            navigationService = new NavigationService();

            ListaSustancias = new ObservableCollection<AgregarSustancia>();

            listaSustanciasAux = new List<AgregarSustancia>(listaAgregarSustancia);

            ListaSustancias = listaAgregarSustancia;

        }
        #endregion

如何防止 Switch 的 Get-Set 属性 中的方法 AsociarDesasociar() 执行模态?我怎样才能封装这个方法? 对我有帮助吗?

创建一个 bool InitComplete 并将其初始化为 false。这将防止 AsociarDesasociar 在初始化完成之前执行

if (value != sustanciaAsociada)
{
  sustanciaAsociada = value;

  if (InitComplete) {
    AsociarDesasociar(sustanciaAsociada);
  }
}

在您的 class 完成所需的任何初始化之后,然后设置 InitComplete = true