首页 > 解决方案 > Xamarin Forms Prism (DialogService) with Switch in ListView items - EventToCommandBehaviour 触发多次

问题描述

我有一个 BindableLayout,在 BindableLayout 的每个项目中都有一个开关,它位于 Prism 对话框页面中。

<StackLayout x:Name="ToggleSingleItemList" BindableLayout.ItemsSource="{Binding FeatureItems}">
    <BindableLayout.ItemTemplate>
        <DataTemplate>

            <StackLayout Margin="0,0,0,20" Orientation="Horizontal">
                            
                <Switch HorizontalOptions="EndAndExpand" IsToggled="{Binding Response, Mode=TwoWay, Converter={converters:TextToBooleanConverter}}">
                    <Switch.Behaviors>
                        <behaviours:EventToCommandBehavior EventName="Toggled" 
                                Command="{Binding Path=BindingContext.ToggleCommand, Source={x:Reference Name=ToggleSingleItemList }}"
                                CommandParameter="{Binding .}" />
                    </Switch.Behaviors>
                </Switch>

            </StackLayout>

        </DataTemplate>
    </BindableLayout.ItemTemplate>
</StackLayout>

Switch 像往常一样绑定到 ViewModel 上的 DelegateCommand:

public DelegateCommand<FeatureItem> ToggleCommand { get; }

我注意到的问题是,当第一次导航到对话框时,当切换开关时,DelegateCommand 会触发一次。

如果我随后关闭对话框并重新打开,然后再次切换开关,则 DelegateCommand 触发两次,如果关闭并重新打开第三次,依此类推......

似乎很清楚,EventToCommandBehaviour 在每次打开对话框时都会向 DelegateCommand 添加额外的绑定,但在关闭对话框时不会取消绑定。

有人对为什么或如何解决有任何想法吗?

感谢所有帮助。

标签: xamarin.formsprism

解决方案


推荐阅读