【发布时间】:2014-06-25 14:54:24
【问题描述】:
我正在为工作制作一个电子邮件客户端,但我无法让可观察的集合以正确的方式绑定到我的列表视图。请告知,因为我无法在网上找到我的确切问题
C#
public partial class Mail : UserControl
{
ObservableCollection<GetMails> BindMe = new ObservableCollection<GetMails>();
public Mail()
{
InitializeComponent();
}
private void Grid_Loaded_1(object sender, RoutedEventArgs e)
{
BindMe = FetchAllHeaders(server, port, false, username, password);
lstMail.ItemsSource = BindMe.ToList();
}
private ObservableCollection<GetMails> FetchAllHeaders(string hostname, int port, bool useSsl, string username, string password)
{
// The client disconnects from the server when being disposed
using (Pop3Client client = new Pop3Client())
{
GetMails gm = new GetMails();
// Connect to the server
client.Connect(hostname, port, useSsl);
// Authenticate ourselves towards the server
client.Authenticate(username, password);
// Get the number of messages in the inbox
int messageCount = client.GetMessageCount();
// We want to download all messages
ObservableCollection<GetMails> getHeaders = new ObservableCollection<GetMails>();
// Messages are numbered in the interval: [1, messageCount]
// Ergo: message numbers are 1-based.
// Most servers give the latest message the highest number
for (int i = messageCount; i > 0; i--)
{
MessageHeader headers = client.GetMessageHeaders(i);
RfcMailAddress from = headers.From;
Message message = client.GetMessage(i);
gm.Header = client.GetMessageHeaders(i).Subject;
gm.From = from.MailAddress.ToString();
int count = 0;
foreach (MessagePart attachment in message.FindAllAttachments())
{
count++;
}
gm.NumberAttach = count;
getHeaders.Add(gm);
}
// Now return the fetched messages
return getHeaders;
}
}
}
XAML
<UserControl x:Class="VeriMail.Mail"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid Loaded="Grid_Loaded_1" Margin="0,0,-132,0">
<ListView x:Name="lstMail" Height="399" VerticalAlignment="Top" Margin="0,0,-67,-99" ScrollViewer.HorizontalScrollBarVisibility="Visible" ScrollViewer.VerticalScrollBarVisibility="Disabled" ScrollViewer.CanContentScroll="True">
<ListView.View>
<GridView>
<GridViewColumn Width="140" Header="Subject" />
<GridViewColumn Width="140" Header="From" />
<GridViewColumn Width="140" Header="Number of Attachments"/>
</GridView>
</ListView.View>
</ListView>
</Grid>
我这样做时得到的输出只是 VeriMail.GetMail 全部
如果我将 gridview 更改为:
<GridViewColumn Width="140" Header="Subject" DisplayMemberBinding="{Binding Header}"/>
<GridViewColumn Width="140" Header="From" DisplayMemberBinding="{Binding From}"/>
<GridViewColumn Width="140" Header="Number of Attachments" DisplayMemberBinding="{Binding NumberAttach}"/>
然后输出更改为我想要的信息,但它会复制一封电子邮件,最后一封插入到可观察集合中。
【问题讨论】: