c# - 如何通过电子邮件 (xamarin.forms) 从 ListView 发送项目
问题描述
我正在使用:https ://docs.microsoft.com/en-us/xamarin/essentials/email?tabs= android 通过电子邮件发送数据。
我现在可以发送普通字符串,但我很难弄清楚如何从我的列表视图发送数据,并像图片一样格式化它们(每个项目都有一行)。
如果有人能给我一个关于如何做到这一点的想法,将不胜感激。
注意:我只需要每个 ListView 项目中的文本。
非常感谢。
我的 ListView 代码
<ListView x:Name="listView" ItemsSource="{Binding Tasks}" HasUnevenRows="True" SelectionMode="None">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Frame Margin="0,5,0,5">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Label Grid.Column="0" Margin="0" Text="{Binding TasksGroup.TasksGroupDate, StringFormat='{0:yyyy-MM-dd}'}" FontSize="12" FontAttributes="Bold" TextColor="Black"/>
<Label Grid.Column="1" Margin="0" Text="{Binding TaskDescription}" FontSize="12" FontAttributes="Bold" TextColor="Black" />
<Label Grid.Column="2" Margin="0" Text="{Binding TaskDuration}" FontSize="12" FontAttributes="Bold" TextColor="Black" />
<Label Grid.Column="3" Margin="0" Text="{Binding TaskDBA}" FontSize="12" FontAttributes="Bold" TextColor="Black"/>
</Grid>
</Frame>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
我的发送电子邮件方法具有易于实现的其他数据,因为它不是列表视图项目
private async void EmailButtonClicked(object sender, EventArgs e)
{
var message = new EmailMessage
{
Subject = "Résultat d'exposition quotidienne",
Body = DureeTotal.Text + " " + SumTotalHours.Text + h.Text + Environment.NewLine + Environment.NewLine + LeqText.Text + " " + LeqResult.Text + dBA.Text
+ Environment.NewLine + Environment.NewLine + ExpositionResultText.Text + " " + ExpositionResult.Text + dBA8.Text + output
};
await Email.ComposeAsync(message);
}
我的页面 ViewModel 具有 Tasks 和 TasksGroup 的集合(它们是生成所需数据的属性)
class ResultPageViewModel : BaseViewModel
{
private ObservableCollection<Tasks> tasks;
public ObservableCollection<Tasks> Tasks
{
get
{
return tasks;
}
set
{
tasks = value;
NotifyPropertyChanged();
}
}
private TasksGroup tasksGroup;
public TasksGroup TasksGroup
{
get => tasksGroup;
set
{
tasksGroup = value;
NotifyPropertyChanged();
}
}
public ResultPageViewModel(TasksGroup tasksGroup)
{
TasksGroup = tasksGroup;
var data = TasksGroup.Taches;
Sum = TimeSpan.Zero;
Tasks = new ObservableCollection<Tasks>(data);
TasksGroup.Taches.ForEach(x =>
{
TaskDBA = x.TaskDBA;
TaskDuration = x.TaskDuration;
TaskDescription = x.TaskDescription;
var TaskGroupDuration = Helper.GetDuration(x.TaskDuration);
Sum = Sum.Add(TaskGroupDuration);
});
SumTotalHours += Math.Round(Sum.TotalHours, 4);
LeqResult = CalculateLeq(tasksGroup);
}
public double CalculateLeq(TasksGroup group)
{
return Math.Round(10 * Math.Log10((1/SumTotalHours)*group.Taches.Sum(x =>
Helper.GetDuration(x.TaskDuration).TotalHours * Math.Pow(10, Convert.ToDouble(x.TaskDBA) / 10.0))), 1);
}
}
解决方案
您可以将数据转换ListView
为Json字符串,然后将它们作为电子邮件的正文发送。
如以下代码转换ObservableCollection<Tasks>
为Json字符串:
using Newtonsoft.Json;
ResultPageViewModel pageViewModel = new ResultPageViewModel();
string output = JsonConvert.SerializeObject(pageViewModel.Tasks);
现在output
可以将字符串作为电子邮件正文发送。
推荐阅读
- javascript - 如何通过匹配具有相似字符的两个值来返回字符串?
- android - 通过在活动上调用finish()关闭应用程序后启动时崩溃
- sql - 我可以将表 1 列与表 2 行连接吗?
- java - 每次调用带有对象引用作为值的枚举是否会创建一个对象?
- javascript - 使用 javascript 进行实时表单验证
- python - 如何检查某个字符串是否在列表中重复多次
- c++ - 编写包含变量值的多行字符串
- vba - 如何将 .bas vba 模块文件内容(变量)集成/链接到 vba 项目中?
- javascript - 在 FORM 的选择中使用图像的最佳实践
- javascript - 在ngOnInit中调用函数时的Angular5打字稿