<ViewCell>
<ViewCell.View>
<Label Text="{Binding ABC}"></Label>
</ViewCell.View>
</ViewCell>
En supposant que cette cellule était à l'intérieur de ListView. Si la page de contenu était liée avec un modèle de vue, comment puis-je obtenir une référence à la liaison de la page de contenu. Actuellement, 'ABC' fait référence à la propriété d'un objet dans la liste, mais je veux obtenir la valeur du contexte de liaison de la page de contenu.
<ffimageloading:CachedImage.GestureRecognizers>
<TapGestureRecognizer BindingContext="{x:Reference page}" Command="{Binding OnSignInCommand}" CommandParameter="{Binding Model}" />
</ffimageloading:CachedImage.GestureRecognizers>
même qubuss donner la bonne réponse j'aime répondre à cette question avec un exemple pour le rendre plus clair
considérons que nous avons une page
<ContentPage
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.Microsoft.com/winfx/2009/xaml"
x:Name="firstPage" -->this reference parent context
x:Class="Your_Class_Name">
<ListView x:Name="ListSource"
ItemsSource="{Binding ListSource}" >
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Grid>
// this come from item source
<Label Text="{Binding ABC}"></Label>
<Button Command="{Binding BindingContext.CommandFromParent
, Source={x:Reference firstPage} }" />
</Grid>
</ViewCell>
/DataTemplate>
</ListView.ItemTemplate>
</ListView>
</ContentPage>
votre modèle de vue devrait ressembler à ça
public class ViewModelName
{
private List<YourDataType> _listSource = new List<YourDataType>();
public List<YourDataType> ListSource
{
get => _listSource;
set
{
_listSource = value;
RaisePropertyChanged();
}
}
public ICommand CommandFromParent => new Command(HandleYourActionHere);
}
}
petite Explication de ce qui se passe, quand on écrit BindingContext.CommandFromParent
BindingContext représente le BindingContext de firstPage (x: Name = "firstPage") qui est ViewModelName
Vous devez ajouter BindingContext="{x:Reference viewmodel}
à l'intérieur de l'étiquette.
<ViewCell>
<ViewCell.View>
<Label Text="{Binding ABC}" BindingContext="{x:Reference Name_Of_Parent}"></Label>
</ViewCell.View>
</ViewCell>
dans Name_Of_Parent vous mettez le nom du composant. Si vous utilisez MVVM et la classe ViewModel, vous devez ajouter x:Name
à votre Contexte contraignant:
<ContentPage.BindingContext>
<mvvm:MasterPageModel
x:Name="viewmodel"/>
</ContentPage.BindingContext>
C'est documentation qui le décrit.
DataContext.Command fonctionne pour moi.
<ContentPage
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.Microsoft.com/winfx/2009/xaml"
x:Name="firstPage"
x:Class="Your_Class_Name">
<ListView x:Name="ListSource" ItemsSource="{Binding ListSource}">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Grid>
<Label Text="{Binding ABC}"></Label>
<Button Command="{Binding DataContext.CommandFromParent, Source={x:Reference firstPage} }" />
</Grid>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</ContentPage>