C#更新表单内容作为列表更新

时间:2017-08-08 20:15:16

标签: c# wpf

我将C#(WPF)用于将人员添加到列表中的项目;很简单。但是,在使用表单将人员添加到列表后,我需要使用主表单来更新",例如,我希望使用括号中的人数更新一个选项卡文本,我会这样做:

((TabItem)tabControl.Items[0]).Header = "All Patients ("+ newPatientList.Count.ToString() + ")";

如果列表已经填充,则此方法有效,但如果我在应用程序运行时使用我的表单手动添加到列表,则不会自行更新。

相关代码: MainWindow,打开表单添加人员列表

private void button_Click(object sender, RoutedEventArgs e)
{
    Window1 addPx = new Window1(this);
    addPx.Show();

}

Window1,手动将人员添加到列表

    public MainWindow Main { get; set; }

    public Window1(MainWindow main)
    {
        InitializeComponent();
        this.Main = main;
    }

   private void adpxbtn_Click(object sender, RoutedEventArgs e)
   {
    if (lstname.Text != string.Empty || frstname.Text != string.Empty || age.Text != string.Empty ||
        rm.Text != string.Empty || status.SelectedValue != null)
    {

        Main.AddNewPatient(lstname.Text, frstname.Text, int.Parse(age.Text), rm.Text, "", int.Parse(status.SelectedItem.ToString()));

        this.Close();
    } else
    {
        MessageBox.Show("You're missing some information!");
    }
}

那我怎么能让主窗口知道刷新信息呢?当我需要显示此列表并在添加/删除人员时将其自动更新时,这将变得特别有用。

谢谢

1 个答案:

答案 0 :(得分:1)

通过您在XAML中绑定的newPatientList中的公共属性展示MainWindow.xaml.cs。它应该是ObservableCollection<T>

public ObservableCollection<Patient> newPatientList { get; } = new ObservableCollection<Patient>();

然后,您可以绑定到XAML中的Count属性:

<TabItem>
    <TabItem.Header>
        <TextBlock>
            <Run Text="All Patients (" /><Run Text="{Binding Path=newPatientList.Count, RelativeSource={RelativeSource AncestorType=Window}, Mode=OneWay}" /><Run Text=")" />
        </TextBlock>
    </TabItem.Header>
</TabItem>

...而不是这样做(从代码中删除以下内容):

((TabItem)tabControl.Items[0]).Header = "All Patients ("+ newPatientList.Count.ToString() + ")";