如何在 xamarin ContentPage 的 BindingContext 中设置多个值

Posted

技术标签:

【中文标题】如何在 xamarin ContentPage 的 BindingContext 中设置多个值【英文标题】:How to multiple value in BindingContext in xamarin ContentPage 【发布时间】:2020-01-26 14:40:43 【问题描述】:

我有 xamarin 应用程序,我需要在按钮单击事件上将两个对象传递给 .cs 文件。

我有两个 ListView 并在第二个 Listview 项目内有按钮。两个 ListView 都将基于 JSON 动态加载。现在的问题是我需要在按钮单击事件中发送父 ListView 数据源和第二个 ListView 数据源。目前我只能使用 BindingContext 发送一个,但我需要将两个或更多对象发送到 .cs 文件。

<ListView  x:Name="StaffListMaster_List" RowHeight="150"> 
<ListView.ItemTemplate>` 
<ListView x:Name="Staff_Record" ItemsSource="Binding Path=detailsobj">` 
<ListView.ItemTemplate>`
<DataTemplate>                                             
<ViewCell>  
<StackLayout  Orientation="Horizontal" >
<Button Clicked="OnActionSheetCancelDeleteClicked" BorderRadius="0"  BindingContext ="Binding item" Text="Binding item[6]"/>`

我想在里面获取 StaffListMaster_List 数据源和 Staff_Record 数据源 OnActionSheetCancelDeleteClicked(object sender, EventArgs e) `

【问题讨论】:

【参考方案1】:

首先,不要那样做。这不是 BindingContexts 的用途,其次,如果您在后面的代码中响应事件,则可以使用 ListView 的名称访问两个数据源,即 Staff_Record.ItemSource

【讨论】:

【参考方案2】:

如果您想在 Listview 中使用嵌套的 Listview,我们可以使用 ListView.GroupHeaderTemplate

ParentItems 类:

public class ParentItems : ObservableCollection<ChildItems>

    public string ID  get; set; 
    public string Title  get; set; 


    public ParentItems(List<ChildItems> list) : base(list)
    

    

ChilsItems 类:

public class ChildItems

    public string ChildTitle  get; set; 
    public string Description  get; set; 

Xaml:

 <ListView HasUnevenRows="True" x:Name="listView" IsGroupingEnabled = "True">
            <ListView.GroupHeaderTemplate>
                <DataTemplate>
                    <ViewCell Height="40">
                        <StackLayout Orientation="Horizontal"
                             BackgroundColor="#3498DB"
                             VerticalOptions="FillAndExpand">
                            <Label Text="Binding ID"
                           VerticalOptions="Center" />
                            <Label Text="   "/>
                            <Label Text="Binding Title"
                           VerticalOptions="Center" />

                        </StackLayout>
                    </ViewCell>
                </DataTemplate>
            </ListView.GroupHeaderTemplate>
            <ListView.ItemTemplate>
                <DataTemplate>
                    <TextCell Text="Binding ChildTitle" Detail="Binding Description"></TextCell>
                </DataTemplate>
            </ListView.ItemTemplate>

        </ListView>

结果:

我已经上传到 GitHub,你可以在 GitHub 上下载 ListViewBindng 文件夹供参考。 https://github.com/WendyZang/Test

【讨论】:

【参考方案3】:

我终于可以解决这个问题了:

第 1 步:创建 IMultiValueConverter 接口 第 2 步:创建 MultiBinding.cs 类(参考:[https://gist.github.com/Keboo/0d6e42028ea9e4256715][1]) 第 3 步:包含 xmlns:multi="clr-namespace:MultiBindingExample" 命名空间 第 4 步:

<Button   Command="Binding ClearListItem">
<Button.CommandParameter>  
<multi:MultiBinding   >     
    <Binding Source="x:Reference control1" Path="BindingContext"/>   
    <Binding Source="x:Reference control2" Path="BindingContext"/> 
 </Button.CommandParameter> 
 </Button>

第 4 步:在视图模型中

 void ClearListViewSelectedItem( object param)
 
    var commandParamList = (object[])param;
 

最终的预期结果是。

【讨论】:

以上是关于如何在 xamarin ContentPage 的 BindingContext 中设置多个值的主要内容,如果未能解决你的问题,请参考以下文章

在基于 Xamarin 表单的应用程序中将数据从 android 服务传递到 ContentPage

在 Xamarin.Forms 中为 ContentPage 使用自定义基类

Xamarin.Forms:我什么时候应该在ContentPage中取消控件的事件

Xamarin XAML语言教程基本页面ContentPage占用面积

Xamarin.Forms ContentPage生命周期的困惑

Xamarine ContentPage.ToolbarItems 未显示/不显示在界面