在C#WPF中更新列表框

时间:2018-01-29 21:05:46

标签: c# wpf listbox

我目前有一个C#应用程序,用于测试设备上的特定参数。我已经创建了一个单独的类来处理测试。我想在“测试类”中添加每个项目后自动更新列表框。

我为UI创建的“MainWindow”类在按钮点击时创建了一个新的“Test”类。

public partial class MainWindow : Window{


    //Other initializing steps..

        private void BeginTestButton_Click(..){
            TestClass tc = new TestClass(this); //<-- passing this class in
            tc.testAll();
        } 
}

其中“TestClass”中的testAll函数看起来像这样..

    public void testAll(){
        view.getListBox().add(test1()); 
        view.getListBox().add(test2());
        view.getListBox().add(test3());
        // and so on
    }

视图是UI类,getListBox()是有问题的列表框。执行的每个“测试”都会返回一些字符串,这将是测试的结果。

将这些测试结果添加到列表框并在每次测试完成后更新,我可以使用哪些方法?谢谢!

2 个答案:

答案 0 :(得分:1)

你想要对TestClass做些什么,可能会扩展INotifyPropertyChanged。从那里你可以在TestClass上添加一个属性。调整列表框以显示的不仅仅是字符串/标记,如果还没有,请执行以下操作:

<ListBox x:Name="ListBox">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <Label Content="{Binding TestName}"></Label>
                <Label Content="{Binding TestCompleteStatus}"></Label>
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

然后,每当您启动测试时,您都需要更改TestClass中的TestCompleteStatus属性(确保在UI线程或调度程序上执行此操作,因为您现在将绑定到UI)。您的属性更改后,ListBox将自动使用新属性值更新。这是INotifyPropertyChanged的功能。

答案 1 :(得分:-1)

public void testAll(){
    view.getListBox().add(test1()); 
    view.getListBox().add(test2());
    view.getListBox().add(test3());
    // and so on
  }

您需要将test1()从void更改为任何func ex:

  int test1(){

 // now retern value
  return 0;
 }

    public void testAll(){
    view.getListBox().add(Convert.ToInt32(test1())); 

    }