首页 > 解决方案 > 如何在代码中传递对象并在 XAML 页面中绑定到它?

问题描述

当在 Listview 中点击该项目时,我得到了该对象。

async private void ListView_ItemTapped(object sender, ItemTappedEventArgs e)
        {
            var vm = BindingContext as MeetingViewModel;
            var meeting = e.Item as MeetingPOCO;
            await Navigation.PushAsync(new Attendees_Page(meeting));
        }

在下一个新页面中,我创建了对象

public partial class Attendees_Page : ContentPage
    {
        private MeetingPOCO thisMeeting;
        public MeetingPOCO ThisMeeting
        {
            get { return thisMeeting; }
            set
            {
                thisMeeting = value;
            }
        }
        public Attendees_Page(MeetingPOCO meeting)
        {
            InitializeComponent();
            ThisMeeting = meeting;
        }

在 XAML 中,我绑定到对象:

<ListView x:Name="MeetingLV"
            Margin="05,0,0,0" 
            ItemsSource="{Binding ThisMeeting}"    
            HasUnevenRows="True"
            SeparatorVisibility="None"
            >
<ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="Auto"/>
                                <ColumnDefinition Width="Auto"/>
                                <ColumnDefinition Width="Auto"/>
                               
                                <ColumnDefinition Width="Auto"/>
                            </Grid.ColumnDefinitions>

                            <StackLayout Orientation="Horizontal">
                                <Label Text="{Binding MeetingDate, StringFormat='{0:MM/ dd/ yyyy}'}"
                                       Style="{StaticResource MyLabels}"
                                   Grid.Column="0"/>

结果是空白页。如何传递“会议”对象并在另一个页面中绑定到它?

标签: xamarinbinding

解决方案


首先,不能将模型绑定到 ListView 的 ItemSource:

ListView 使用 ItemsSource 属性填充数据,该属性可以接受任何实现IEnumerable的集合。

我写了一个简单的例子来展示如何设置ItemsSource

public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();

        //ThisMeeting = meeting;

        ThisMeeting = new MeetingPOCO() { MeetingDate = "123"};

        ObservableCollection<MeetingPOCO> dataSource = new ObservableCollection<MeetingPOCO>();

        dataSource.Add(ThisMeeting);

        MeetingLV.ItemsSource = dataSource;
    }

    private MeetingPOCO thisMeeting;
    public MeetingPOCO ThisMeeting
    {
        get { return thisMeeting; }
        set
        {
            thisMeeting = value;
        }
    }
}

public class MeetingPOCO
{
    public string MeetingDate { get; set; }
}

你想使用绑定,它应该是这样的:

public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();

        //ThisMeeting = meeting;

        ThisMeeting = new MeetingPOCO() { MeetingDate = "123"};

        MeetingPOCO pocp = new MeetingPOCO();
        pocp.dataSource.Add(ThisMeeting);
        BindingContext = pocp;
    }

    public MeetingPOCO ThisMeeting { get; set; }
}

public class MeetingPOCO
{
    public ObservableCollection<MeetingPOCO> dataSource { get;set;}

    public string MeetingDate { get; set; }

    public MeetingPOCO()
    {
        dataSource = new ObservableCollection<MeetingPOCO>();
    }
}

在 Xaml 中,绑定到dataSource

<ListView x:Name="MeetingLV"
        Margin="05,0,0,0" 
        ItemsSource="{Binding dataSource}"    
        HasUnevenRows="True"
        SeparatorVisibility="None"
        >
    <ListView.ItemTemplate>
        <DataTemplate>
            <ViewCell>
                <Label Text="{Binding MeetingDate}"/>
            </ViewCell>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

您可以阅读该文档并在其中找到有关如何绑定的示例。


推荐阅读