在我的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窗口,但这里有我所拥有的:
显示相应的值:
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
,但我不知道如何...
答案 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”的项时它会抛出一个错误:)