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
}
}
};