web-dev-qa-db-ja.com

Xamarinフォーム:親バインディングへの参照方法

<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>
13
LittleFunny

キューバスでさえ正しい答えを与えます私はそれをより明確にするために例を挙げてこの質問に答えたいです

ページがあるとしましょう

<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を表します

10
Mina Fawzy

ラベル内に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 です。

3
qubuss

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>
0
lsaudon