<ViewCell>
<ViewCell.View>
<Label Text="{Binding ABC}"></Label>
</ViewCell.View>
</ViewCell>
このビューセルがListView内にあると仮定します。コンテンツページがビューモデルにバインドされている場合、コンテンツページのバインディングへの参照を取得するにはどうすればよいですか。現在、「ABC」はリスト内のオブジェクトのプロパティを参照していますが、コンテンツページのbindingcontextから値を取得したいと考えています。
<ffimageloading:CachedImage.GestureRecognizers>
<TapGestureRecognizer BindingContext="{x:Reference page}" Command="{Binding OnSignInCommand}" CommandParameter="{Binding Model}" />
</ffimageloading:CachedImage.GestureRecognizers>
キューバスでさえ正しい答えを与えます私はそれをより明確にするために例を挙げてこの質問に答えたいです
ページがあるとしましょう
<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>
あなたのビューモデルはそのように見えるはずです
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);
}
}
BindingContext.CommandFromParent
BindingContextを記述したときに何が起こるかについての説明は、ViewModelNameであるfirstPage(x:Name = "firstPage")のBindingContextを表します
ラベル内にBindingContext="{x:Reference viewmodel}
を追加する必要があります。
<ViewCell>
<ViewCell.View>
<Label Text="{Binding ABC}" BindingContext="{x:Reference Name_Of_Parent}"></Label>
</ViewCell.View>
</ViewCell>
name_Of_Parentにはコンポーネントの名前を入れます。 MVVMとViewModelクラスを使用する場合は、バインディングコンテキストにx:Name
を追加する必要があります。
<ContentPage.BindingContext>
<mvvm:MasterPageModel
x:Name="viewmodel"/>
</ContentPage.BindingContext>
これは、それを説明する documentation です。
DataContext.Commandが機能します。
<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>