xamarin - 如何在代码中传递对象并在 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"/>
结果是空白页。如何传递“会议”对象并在另一个页面中绑定到它?
解决方案
首先,不能将模型绑定到 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>
您可以阅读该文档并在其中找到有关如何绑定的示例。
推荐阅读
- reactjs - 如何使用 React 和 Typescript 组合 Material UI 组件?
- mod-rewrite - lighttpd:mod_rewrite 忽略 .htaccess 中的规则
- python - Python - 如果存在于另一个 df 列中,则从 df 列中删除元组
- c# - 如何创建自定义 Active Directory 权限和组,以便我可以针对此验证用户?
- f# - 在 F# 的编译时获取模块的类型
- git - 按分支拆分提交历史
- r - 将数据(已经在多个数据帧中)重组为 R 中不同的多个数据帧
- swift - 子 uiviewcontroller 未加载到导航栏上
- python - AttributeError:“列表”对象没有属性“tk”
- java - 如何在 Collection 中处理返回类型中的泛型类型