C# 绑定到父级';xamarin形式中的语境

C# 绑定到父级';xamarin形式中的语境,c#,xaml,xamarin.forms,binding,C#,Xaml,Xamarin.forms,Binding,我就是想不起来。我的大脑融化了,试图理解如何与父母的环境相结合 这里我有一个(相对)简单的对象: public class BinDefinition { public string labelAdresse { get; set; } public InventoryItem inventoryItem { get; set; } public List<BinContent> binContents { get; set; } public List<InventoryPr

我就是想不起来。我的大脑融化了,试图理解如何与父母的环境相结合

这里我有一个(相对)简单的对象:

public class BinDefinition
{
public string labelAdresse { get; set; }
public InventoryItem inventoryItem { get; set; }
public List<BinContent> binContents { get; set; }
public List<InventoryProduct> productsinBinContent { get; set; }
public bool showDeleteButton { get; set; }
public bool showTransferButton { get; set; }
public ObservableCollection<ListItem> Items { get; set; }
}
最后,相关的xaml部分:

<ListView x:Name="ItemsListView" Grid.Row="1" 
                ItemsSource="{Binding Items}"
                VerticalOptions="FillAndExpand"
                HasUnevenRows="true"
                RefreshCommand="{Binding LoadItemsCommand}"
                IsPullToRefreshEnabled="true"
                IsRefreshing="{Binding IsBusy, Mode=OneWay}"
                CachingStrategy="RecycleElement"
                ItemTapped="ItemsListView_ItemTapped"
                Grid.RowSpan="2"
                  >
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <ViewCell>
                            <Grid BackgroundColor="LightBlue">
                                <Grid.RowDefinitions>
                                    <RowDefinition Height="20"></RowDefinition>
                                    <RowDefinition Height="20"></RowDefinition>
                                    <RowDefinition Height="20"></RowDefinition>
                                </Grid.RowDefinitions>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="*"></ColumnDefinition>
                                    <ColumnDefinition Width="60"></ColumnDefinition>
                                    <ColumnDefinition Width="60"></ColumnDefinition>
                                </Grid.ColumnDefinitions>
                                <Label Grid.Row="0" Text="{Binding Name}"  LineBreakMode="WordWrap" FontAttributes="Bold" FontSize="16" HorizontalOptions="FillAndExpand" />
                                <Label Grid.Row="1" Text="{Binding EANReference}"  LineBreakMode="WordWrap" TextColor="Gray" FontSize="16" HorizontalOptions="FillAndExpand" />
                                <Label Grid.Row="2" Text="{Binding QuantityDisplay}"  LineBreakMode="WordWrap" TextColor="DarkBlue" FontSize="16" HorizontalOptions="FillAndExpand" />
                                <Button Grid.RowSpan="3" Grid.Column="1" Text="Info" Clicked="btnInfos_Clicked" CommandParameter="{Binding EAN}"/>
                                <Button Grid.RowSpan="3" Grid.Column="2" Text="Del" Clicked="btnDel_Clicked" CommandParameter="{Binding Id}" IsVisible="{Binding BindingContext.primaryBin.showDeleteButton, Source={x:Reference Inv2PageMainContent}}"/>
                                <Button Grid.RowSpan="3" Grid.Column="2" Text="Tra" Clicked="btnTransfer_Clicked" CommandParameter="{Binding Id}" IsVisible="{Binding BindingContext.primaryBin.showTransferButton, Source={x:Reference Inv2PageMainContent}}"/>
                            </Grid>
                        </ViewCell>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>

我试图绑定最后两个按钮,以便根据BindDefinition中可用的布尔值的状态显示或隐藏。但此时,所述按钮的datacontext是一个ListItem(来自viewModel中的项)。 我只是不知道如何让直接家长使用其财产

编辑:抱歉,我似乎没有提供足够的信息

inv2MainpageContent是页面的名称。x:Name=inv2MainPageContent

页面的BindingContext是viewModel的一个实例。该viewModel包含两个BindDefinition。在这个容器定义中有多个属性。对我来说重要的三个是bool ShowDelete/ShowTransfer和集合项目


“我的视图”中的列表视图已深入primaryBin并使用“primaryBin.Items”作为其ItemSource。问题是,我想将这些对象的可见性绑定到primaryBin.ShowDelete/ShowTransfer。

您所说的“如何回调直接父对象以使用其属性”到底是什么意思?你还没有真正弄清楚你的结构是什么。总的来说,我认为如果您想绑定到路径(即属性上的属性),您必须这样做:
IsVisible=“{Binding path=BindingContext.primaryBin.showDeleteButton,Source={x:Reference Inv2PageMainContent}”
。取决于您实际想要实现的目标,这可能会解决您的问题,参考
Inv2PageMainContent
是在哪里定义的?您在哪里设置绑定上下文?就我个人而言,从这个问题上看,我不清楚您的2个类和xaml之间的关系。要将绑定设置为父级的上下文,您可以为父级的父级布局添加
x:Name
。然后使用
x:Reference
BindingContext
设置绑定。检查代码:
<ListView x:Name="ItemsListView" Grid.Row="1" 
                ItemsSource="{Binding Items}"
                VerticalOptions="FillAndExpand"
                HasUnevenRows="true"
                RefreshCommand="{Binding LoadItemsCommand}"
                IsPullToRefreshEnabled="true"
                IsRefreshing="{Binding IsBusy, Mode=OneWay}"
                CachingStrategy="RecycleElement"
                ItemTapped="ItemsListView_ItemTapped"
                Grid.RowSpan="2"
                  >
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <ViewCell>
                            <Grid BackgroundColor="LightBlue">
                                <Grid.RowDefinitions>
                                    <RowDefinition Height="20"></RowDefinition>
                                    <RowDefinition Height="20"></RowDefinition>
                                    <RowDefinition Height="20"></RowDefinition>
                                </Grid.RowDefinitions>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="*"></ColumnDefinition>
                                    <ColumnDefinition Width="60"></ColumnDefinition>
                                    <ColumnDefinition Width="60"></ColumnDefinition>
                                </Grid.ColumnDefinitions>
                                <Label Grid.Row="0" Text="{Binding Name}"  LineBreakMode="WordWrap" FontAttributes="Bold" FontSize="16" HorizontalOptions="FillAndExpand" />
                                <Label Grid.Row="1" Text="{Binding EANReference}"  LineBreakMode="WordWrap" TextColor="Gray" FontSize="16" HorizontalOptions="FillAndExpand" />
                                <Label Grid.Row="2" Text="{Binding QuantityDisplay}"  LineBreakMode="WordWrap" TextColor="DarkBlue" FontSize="16" HorizontalOptions="FillAndExpand" />
                                <Button Grid.RowSpan="3" Grid.Column="1" Text="Info" Clicked="btnInfos_Clicked" CommandParameter="{Binding EAN}"/>
                                <Button Grid.RowSpan="3" Grid.Column="2" Text="Del" Clicked="btnDel_Clicked" CommandParameter="{Binding Id}" IsVisible="{Binding BindingContext.primaryBin.showDeleteButton, Source={x:Reference Inv2PageMainContent}}"/>
                                <Button Grid.RowSpan="3" Grid.Column="2" Text="Tra" Clicked="btnTransfer_Clicked" CommandParameter="{Binding Id}" IsVisible="{Binding BindingContext.primaryBin.showTransferButton, Source={x:Reference Inv2PageMainContent}}"/>
                            </Grid>
                        </ViewCell>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>