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

问题描述 投票:1回答:1

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

List

[解除模态时,我向用户显示可以与主列表相关联的元素,并且还以<Switch>指示是否添加了这些元素,目的是在按下开关时从中添加或删除元素。主列表

Modal

问题是,当取消模态时,将执行向列表中添加和删除元素的方法,并且每次我升高模态时,都会复制我的记录,如图所示

Duplicated

这是由于以下事实:在提升模态时,将执行添加或删除化学品的方法,每次绑定到视图中与<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

如何防止交换机的Get-Set属性中的方法AsociarDesasociar()执行模态?如何封装此方法?对我有帮助吗?

c# xamarin mvvm xamarin.forms inotifypropertychanged
1个回答
0
投票

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

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

  if (InitComplete) {
    AsociarDesasociar(sustanciaAsociada);
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.