2015-10-30 26 views
0

請原諒我的noobieness和我的英語。我是WPF和自制代理的新手。我的任務是製作Outlook代理,該代理將與Outlook連接並從特定文件夾中檢索每封電子郵件。它還應該得到具體的數據,如身體,發件人,SentOn,主題等。此外,它應該預先解析未經閱讀的電子郵件的郵箱。展望代理檢索郵件並顯示它

所以我想我正確地檢索所有這些細節,糾正我,如果我錯了。我需要採取的下一步是我卡住的地方。現在我正在檢索正確的信息,如何將我的特定數據(如正文,發件人等)放在我的WPF數據網格中。

這是我的Outlook連接方法:

public void ConnectieOutlook() {  

    ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP1); 

    //service.Credentials = new NetworkCredential("{Active Directory ID}", "{Password}", "{Domain Name}"); 

    service.AutodiscoverUrl("******@***.nl"); 

    /*FindItemsResults<Item> findResults = service.FindItems(
     WellKnownFolderName.Inbox, 
     new ItemView(10));*/ 
    SearchFilter sf = new SearchFilter.SearchFilterCollection(LogicalOperator.And, new SearchFilter.IsEqualTo(EmailMessageSchema.IsRead, false)); 
    FolderId InboxId = new FolderId(WellKnownFolderName.Inbox, "**********@****.nl"); 

    FindItemsResults<Item> findResults = service.FindItems(InboxId, new ItemView(5)); 

    foreach (Item item in findResults.Items) 
    { 
     ((EmailMessage)item).Load(); 
     Console.WriteLine(item.Subject); 
     /// URLGRID.ItemsSource = findResults.Items; 
     findResults.Where(t => t is EmailMessage).Select(Item => new 
     { 
      item.DateTimeReceived, 
      ((EmailMessage)item).Sender.Name, 
      item.Subject, 
      item.InternetMessageHeaders, 
      item.Body, 
      item.Attachments 
     }); 
    } 
} 

這是我MainWindow.xaml.cs我的DataGrid載入的方法。你會看到它是空的,因爲我真的不知道從哪裏開始。 URLGRID是我的Datagrid的名稱。

private void DataGrid_Loaded(object sender, RoutedEventArgs e) 
{ 
    URLGRID. 
} 

如何使用我的數據填充此URLGRID?請不要苛刻,請記住,我被扔到海里,並被告知讓這個特工生存。所以我肯定錯過了一些基本知識,但我不知道在哪裏尋找它。任何建議的教程將非常歡迎:)

謝謝!

回答

0

關於控制使用方法: 嗯,我會建議你先用ListView,你將只具有隻讀數據同時顯示讀/未讀郵件。 ListViewDataGrid之間的差異只是其中之一。編輯。您需要編輯使用DataGrid,否則使用ListView。您還可以在ListView中進行編輯,但它更容易,並且可以編入DataGrid。否則,不管什麼可以在DataGrid中顯示,都可以在ListView中顯示。

您可以閱讀this article on CodeProject以更好地瞭解DataGrid以及ListViewDataGrid之間的主要差異。

程序流程您應該使用ObservableCollection綁定您的控件,以便從服務器檢索到的任何新項目都可以在控件中無縫顯示。因此,您可以將控件的ItemsSource與ObservableCollection<Item>>綁定。爲此,您不需要DataGrid_Loaded事件。如果您的流程在加載窗口或單擊按鈕時獲取電子郵件,則將這些項目添加到綁定集合中。但是,如果應該記住,如果程序在後臺線程中獲取記錄,則應該使用Dispatcher.BeginInvoke方法異步更新集合。

顯示:如果您使用ListView,然後根據顯示需求編寫ItemTemplate。 datatemplate可以定義子控件,它將顯示電子郵件的各種屬性,如body,subject,to/from。

+0

@ user3599415 - 答案是否解決您的查詢? – user1672994