itemdisplaybinding example displaymemberpath c# listview xamarin.forms scrollview

c# - example - ¿Cómo puedo vincular el valor del índice al elemento param en la propiedad ScrollToAsync de ScrollView-formularios xamarin



xamarin picker displaymemberpath (1)

Puede crear un ScrollView personalizado con una propiedad indexable personalizable.

public class CustomScrollView : ScrollView { public static readonly BindableProperty IndexProperty = BindableProperty.Create ( propertyName: nameof (Index), returnType: typeof (int), declaringType: typeof (CustomScrollView), defaultValue: 0, defaultBindingMode: BindingMode.TwoWay, propertyChanged: HandleIndexChanged ); static void HandleIndexChanged (BindableObject bindable, object oldValue, object newValue) { var view = (CustomScrollView)bindable; view.Index = (int)newValue; // Call your view.ScrollToAsync here. // Depending on the structure of your XAML you could call // it using view.Content to go through the control tree. // Such as (view.Content as StackLayout).Children[newValue] } public int Index { get { return (int)GetValue (IndexProperty); } set { SetValue (IndexProperty, value); } } }

A continuación, puede hacer referencia a este ScrollView personalizado en su página XAML en lugar de la normal añadiendo esta parte a su declaración de ContentPage :

xmlns:custom="clr-namespace:[YourNamespace];assembly=[YourAssembly]"

Y haciendo referencia al control de la siguiente manera:

<custom:CustomScrollView Index="{Binding TIndex}" />

Soy nuevo en la programación. Estoy intentando vincular el valor del índice de un elemento en scrollview a una propiedad scrollview llamada ScrollToAsync, de modo que centre automáticamente el elemento seleccionado de scrollview.

Debajo está mi código para INotifyPropertyChanged

class LVItem : INotifyPropertyChanged { private int _tIndex; public int TIndex { get { return _tIndex; } internal set { _tIndex = value; OnPropertyChanged("TIndex"); } } public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } }

y la propiedad ScrollToAsnyc de ScrollView

scroll.ScrollToAsync(sLayout.Children[index], ScrollToPosition.Center, true);

Quiero que ''index'' esté enlazado ... ¿podemos vincularlo? Si es así, ¿cómo? Por favor ayúdame con esto..

A continuación se muestra el código de scrollview horizontal

//horizontal list StackLayout sLayout = new StackLayout() { Orientation = StackOrientation.Horizontal }; for (int i = 0; i<itemLst.Count; i++) { Label label = new Label() { HorizontalTextAlignment = TextAlignment.Center, TextColor = Color.Black, FontSize = Device.GetNamedSize(NamedSize.Medium, new Label()) }; label.Text = itemLst[i]; gestureRecognizer = new TapGestureRecognizer { Command = new Command(TapL_Tapped), CommandParameter = label, }; label.GestureRecognizers.Add(gestureRecognizer); sLayout.Children.Add(label); } ScrollView scroll = new ScrollView { Orientation = ScrollOrientation.Horizontal, Content = new StackLayout { Children = { sLayout } } };