为什么我的问题不在ListBox中填充?

时间:2016-02-21 18:29:50

标签: c# wpf listbox

我正在尝试根据用户在上一个窗口中使用单选按钮选择的内容在子窗口中填充ListBox。这是我的方法。

private void ListBoxQuestions() 
{
    MainWindow a = new MainWindow();

    if (a.Beginner.IsChecked == true) {
        ListBoxQ.Items.Add("What is 2 + 2?");
        ListBoxQ.Items.Add("What is 32 + 5?");
        ListBoxQ.Items.Add("What is 42 + 7?");
        ListBoxQ.Items.Add("What is 8 + 15?");
        ListBoxQ.Items.Add("What is 4 + 2?");
    }
}

我想说的是,如果用户选择了RadioButton,那么在下一个窗口中将这些问题添加到ListBox中。但它不起作用,ListBox中没有任何内容。是否有更好的方法将父属性引用到子窗口?任何建议都将不胜感激。

3 个答案:

答案 0 :(得分:1)

使用公共静态变量,如下所示:

将以下代码添加到主表单:

public static bool BegginerChecked;

然后双击您的RadioButton并在其创建的void中添加以下代码:

BegginerChecked = Begginer.IsChecked;

主表单中的最终代码如下所示:

public static bool BegginerChecked;
private void Begginer_CheckedChanged(object sender, EventArgs e)
{
    BegginerChecked = Begginer.IsChecked;
}

然后将子表单中的代码更改为以下内容:

private void ListBoxQuestions()
{
    if (MainWindow.BegginerChecked == true)
    {
        ListBoxQ.Items.Add("What is 2 + 2?");
        ListBoxQ.Items.Add("What is 32 + 5?");
        ListBoxQ.Items.Add("What is 42 + 7?");
        ListBoxQ.Items.Add("What is 8 + 15?");
        ListBoxQ.Items.Add("What is 4 + 2?");
    }
}

答案 1 :(得分:0)

如果我理解正确,有两个窗口,例如MainWindowSecondWindow。 假设您想要从ListBox填充SecondWindow MainWindow,那么您的代码应该如下:

public partial class MainWindow : Window
{
   private void Button_Click(object sender, RoutedEventArgs e)
   {
       SecondWindow secondWindow = new SecondWindow();
       secondWindow.listBox.Items.Add("What is 2 + 2?");
       secondWindow.listBox.Items.Add("What is 32 + 5?");
       secondWindow.listBox.Items.Add("What is 42 + 7?");
       secondWindow.listBox.Items.Add("What is 8 + 15?");
       secondWindow.listBox.Items.Add("What is 4 + 2?");
       secondWindow.Show();//or ShowDialog() if you want to show a modal window
    }
}

<强>更新

您可以使用Application个对象。您可以将内容存储在Properties集合中。例如,您应该在MainWindow中的PropertiesBeginnerChecked中设置值:

Application.Current.Properties["fooBar"] = "BegginerChecked";

然后在SecondWindow中,您应该阅读Application.Current.Properties["fooBar"]并填写ListBox

if((string)Application.Current.Properties["fooBar"]=="BegginerChecked")
   ListBoxQ.Items.Add("What is 2 + 2?");
   ListBoxQ.Items.Add("What is 32 + 5?");
   ListBoxQ.Items.Add("What is 42 + 7?");
   ListBoxQ.Items.Add("What is 8 + 15?");
   ListBoxQ.Items.Add("What is 4 + 2?");

答案 2 :(得分:0)

window中打开您的新MainWindow,如下所示:

Window newWindow = new Window();
newWindow.Owner = this;
newWindow.Show();

在新的window执行:

private void ListBoxQuestions()
{
    MainWindow a = this.owner as MainWindow;//mainWindow is type of the window current window is opened
    if (a.Beginner.IsChecked == true) 
    {
        ListBoxQ.Items.Add("What is 2 + 2?");
        ListBoxQ.Items.Add("What is 32 + 5?");
        ListBoxQ.Items.Add("What is 42 + 7?");
        ListBoxQ.Items.Add("What is 8 + 15?");
        ListBoxQ.Items.Add("What is 4 + 2?");
    }
}