繁体   English   中英

我如何通过 email ( xamarin.forms ) 从 ListView 发送项目

[英]How can i send the items from a ListView by email ( xamarin.forms )

我正在使用: https://learn.microsoft.com/en-us/xamarin/essentials/email?tabs=android通过 email 发送数据。

我现在可以发送普通字符串,但我很难弄清楚如何从我的列表视图发送数据,并将它们格式化为图片(每个项目一行)。

如果有人能给我一个关于如何做到这一点的想法,我将不胜感激。

注意:我只需要每个 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>

我的发送 email 方法有其他易于实现的数据,因为它不是列表视图项

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字符串,然后将它们作为email的正文发送。

例如按照代码将ObservableCollection<Tasks>转换为Json字符串:

using Newtonsoft.Json;  

ResultPageViewModel pageViewModel = new ResultPageViewModel();
string output = JsonConvert.SerializeObject(pageViewModel.Tasks);

现在output字符串可以作为 email 的正文发送。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM