Xamarin Forms EventToCommandBehavior

에 따르면

다음 위치에있는 EventToCommandBehavior에 대한 예제를 따르려고했습니다.

https://developer.xamarin.com/guides/xamarin-forms/application-fundamentals/behaviors/reusable/event-to-command-behavior/

이 예제는 목록보기의 항목에 대해 실행되는 selectedItem 이벤트를 보여줍니다. 내 희망은 내 목록보기의 모든 항목에 대해 Switch 이벤트를 발생시키는 것입니다.

EventName을 "ItemsSelected"에서 "Toggled"(스위치에 대한 이벤트)로 변경했는지 확인했지만 이벤트가 전혀 발생하지 않았습니다. 내가 뭘 잘못하고 있니?

FWIW, MVVM 패턴을 따르고 "코드 뒤"를 최소화하려고합니다.

GaragePage.xaml

  <ContentPage.Resources>
    <ResourceDictionary>
        <converters:ToggledItemEventArgsConverter x:Key="ToggledConverter" />
    </ResourceDictionary>
</ContentPage.Resources>

                  <ListView x:Name="listView" VerticalOptions="StartAndExpand" HasUnevenRows="true" ItemsSource="{Binding Previews}" HeightRequest="800" SeparatorVisibility="None"
                                    behaviors:ListViewBehavior.NoBackgroundSelection="True">
                            <ListView.ItemTemplate>
                                <DataTemplate>
                                    <ViewCell>
                                        <cardView:CardView Margin="40,15,40,15" HeightRequest="200"  CardViewOutlineColor="{StaticResource Primary}" Padding="5" CardViewOutlineColorThickness="1" CardViewHasShadow="True">
                                            <cardView:CardView.CardViewContent>
                                                <StackLayout Orientation="Vertical"  BackgroundColor="White" >
                                                    <StackLayout VerticalOptions="CenterAndExpand" >
                                                        <StackLayout Grid.Row="0" Grid.Column="0"  >
                                                            <StackLayout   HorizontalOptions="Center">
                                                                <Label Text="Enable Mobile Alert" FontSize="Small" TextColor="{StaticResource LightTextColor}"/>
                                                                <Switch IsToggled="{Binding PushNotification}" HorizontalOptions="Center">
                                                                    <Switch.Behaviors>
                                                                        <behaviors:EventToCommandBehavior EventName="Toggled" Command="{Binding ToggleAlertCommand}" Converter="{StaticResource ToggledConverter}" />
                                                                    </Switch.Behaviors>
                                                                </Switch>
                                                            </StackLayout>
                                                        </StackLayout>
                                                    </StackLayout>
                                                </StackLayout>
                                            </cardView:CardView.CardViewContent>
                                        </cardView:CardView>
                                    </ViewCell>
                                </DataTemplate>
                            </ListView.ItemTemplate>
                        </ListView>

GaragePageViewModel.cs

public ICommand ToggleAlertCommand { get; private set; }

public GaragePageViewModel()
    {
        ToggleAlertCommand = new Command<Vehicle>(ToggleMobileAlert);
    }

private async Task ToggleMobileAlert(GarageVehicle vehicle)
    {
       //do work
    }

ToggledItemEventArgsConverter.cs

public class ToggledItemEventArgsConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var eventArgs = value as ToggledEventArgs;
        return eventArgs.Value;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

GaragePage.xaml.cs

   public GaragePage()
        {
            InitializeComponent();
            BindingContext = App.Container.Resolve<GaragePageViewModel>();
        }
댄 시겔

질문과 코드에 차이가 있습니다. 코드는 Behavior를 AttachedProperty로 사용하려고한다는 것을 보여줍니다.

행동은 속성이 아닙니다. 비헤이비어는 VisualElement의 속성 인 Behaviors 컬렉션에 추가됩니다. 여기 에서 Behavior로 작업하는 방법을 볼 수 있습니다 . 이 특정 예제는 Prism EventToCommandBehavior를 사용합니다.이 예제는 Xamarin의 예제에 비해 몇 가지 이점이 있습니다. 명령으로 보낼 EventArgs에 속성이 무엇인지 지정할 수 있습니다.

최신 정보:

스위치와 같은 것을 업데이트 할 때 명령을 트리거하려는 경우 다음을 수행 할 수 있습니다 (다시 Prism EventToCommandBehavior 사용).

<Switch IsToggled="{Binding Foo}">
    <Switch.Behaviors>
        <behavior:EventToCommandBehavior EventName="Toggled"
                                         Command="{Binding BindingContext.FooCommand,Source={x:Reference view}}"
                                         CommandParameter="{Binding .}"/>
    </Switch.Behaviors>
</Switch>

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

EventToCommandBehavior를 사용하여 VM에 대한 Xamarin Forms ListView 명령

분류에서Dev

xamarin forms - actionbar color

분류에서Dev

Xamarin Forms Switch XAML

분류에서Dev

Xamarin Forms Reverse PushModalAsync

분류에서Dev

Xamarin Forms 영역

분류에서Dev

Xamarin Forms DependencyService nullReferenceException

분류에서Dev

Xamarin Forms TemplateSelector for View

분류에서Dev

Xamarin 양식 용 Prism에서 EventToCommandBehavior를 사용하여 ItemTappedEventArgs를 가져 오는 방법

분류에서Dev

Xamarin.Forms없이 Xamarin BeginInvokeOnMainThread

분류에서Dev

Xamarin.Forms Accessibilty VoiceReader

분류에서Dev

Use RadioButton in Xamarin.Forms

분류에서Dev

Customizing Xamarin.Forms layouts

분류에서Dev

Xamarin Forms: ContentPage OnCreate event?

분류에서Dev

Xamarin.Forms 맵 핀

분류에서Dev

Xamarin.Forms (공유)

분류에서Dev

Xamarin Forms : Toasts.Forms.Plugin 오류

분류에서Dev

Onlaunched의 Xamarin.Forms.Forms.Init (e) FileNotFoundExeception

분류에서Dev

Xamarin Forms Remove space from Entry

분류에서Dev

Xamarin.Forms 선택기

분류에서Dev

Xamarin Forms Bind List <myObject> to Picker

분류에서Dev

Xamarin Forms Transalted 단추 클릭

분류에서Dev

Xamarin Forms iOS Renderer for Facebook Audience Network

분류에서Dev

How to use message pack in xamarin forms

분류에서Dev

Xamarin Forms Artnet 및 UDP 전송

분류에서Dev

Xamarin Forms, XAML의 동적 ScrollView

분류에서Dev

Xamarin.Forms-DatePicker 복제

분류에서Dev

How to access a field in a database table in Xamarin Forms

분류에서Dev

Xamarin Forms Maps Google 전용?

분류에서Dev

Xamarin.Forms에 뷰 삽입