如何在对话框中显示ListBox项的数据?

时间:2015-11-05 16:42:46

标签: c# wpf xaml

在我的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");
    }
}

拦截点击事件到元素ListBox:

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 个答案:

答案 0 :(得分: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”的项时它会抛出一个错误:)