2015-11-05 69 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

相关问题