다음 위치에있는 EventToCommandBehavior에 대한 예제를 따르려고했습니다.
이 예제는 목록보기의 항목에 대해 실행되는 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] 삭제
몇 마디 만하겠습니다