2015-11-05 70 views
0

在我的WPF程序中,我有列表框控制:如何在對話框中顯示ListBox項目的數據?

<ListBox x:Name="mailsListBox" SelectionChanged="mailsListBox_SelectionChanged" > 
    <ListBoxItem Content="..." Background="#FFF3F3F3" Margin="0,0,0,1" /> 
    <ListBoxItem Content="..." Margin="0,0,0,1"/> 
    <!-- ... --> 
    <ListBoxItem Content="..." Background="#FFF3F3F3" Margin="0,0,0,1" /> 
    <ListBoxItem Content="..." Margin="0,0,0,1"/> 
</ListBox> 

當我按下它的分量,我需要出示dialog窗口,但在這裏我有什麼:

enter image description here

顯示相應的值:

public class Emails 
{ 
    public Emails() 
    { 
     AddMailsToList(); 
    } 

    public List<string> mailsList = new List<string>(); 

    public void AddMailsToList() 
    { 
     MainWindow obj = new MainWindow(); 
     mailsList.Add(obj.mailsListBox.Items[0].ToString()); 
     mailsList.Add(obj.mailsListBox.Items[1].ToString()); 
     //... 
     mailsList.Add(obj.mailsListBox.Items[9].ToString()); 

     // title of the mail 
     mailsList.Add("You have new message"); 
    } 
} 

攔截點擊事件到元素列表框:

public partial class MainWindow : MetroWindow 
{ 
    private async void mailsListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     Emails obj = new Emails(); 

     await this.ShowMessageAsync(
      obj.mailsList[10], 
      obj.mailsList[mailsListBox.SelectedIndex]); 
    } 
} 

如何僅顯示對話框中需要的數據?

EDIT1:

我變薄我有一個錯誤的代碼結構,我需要使用ItemsSource,但我不知道如何..

+1

在你的' AddMailsToList',你爲什麼要做「MainWindow obj = new MainWindow();」 ?因爲你創建了一個新窗口,obj.mailsListBox應該是空的,不是嗎? – carndacier

+0

@carndacier因爲它不在包含'ListBox'的表單的類中。這就是爲什麼我需要'obj'來從另一個類訪問'ListBoxItems' – dima

+0

你能給我更多關於你想要的東西的細節嗎? 您希望當您單擊列表框中的某個項目時,顯示一個對話框,顯示所選項目文本? – carndacier

回答

2

我不明白的點Email類,我認爲你肯定有一個數據模型結構問題。

但如果你只是想顯示你的列表框的選擇項目的文字,給一個嘗試是:

private void mailsListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     ListBox lb = (ListBox)sender; 
     if (lb != null && !string.IsNullOrEmpty(lb.SelectedItem.ToString())) 
     { 
      await this.ShowMessageAsync(
     ((ListBoxItem)lb.SelectedItem).Content.ToString(), 
     obj.mailsList[mailsListBox.SelectedIndex]); 
     } 
    } 

如果用戶選擇了一個項目經常檢查。如果你使用mailsListBox.SelectedIndex並且用戶沒有選擇任何東西,它將返回-1,並且當你嘗試訪問數組的位置「-1」處的項目時它會拋出錯誤:)

+0

'ShowMessageAsync'是一個來自MahApps.Metro庫的函數,比如'MessageBox.Show()'。它會在屏幕截圖上創建一個對話窗口。第一個論點是標題和第二個內容。現在我仍然有文本'System.Windows.Controls.ListBoxItem' :( – dima

+0

對不起,我以前沒有使用過這個函數。 我已經編輯了我的答案,試了一下 – carndacier

+0

現在有效,謝謝=) – dima

相關問題