2017-08-08 80 views
-1

我正在使用C#(WPF)來將項目添加到列表中;夠簡單。使用表單的人添加到列表中後,不過,我需要的主要形式,以「更新」,比如我想要一個標籤的文本與人括號,我會做這樣的數量更新:C#更新表單內容作爲列表更新

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

這適用於已經填充了列表的情況,但如果在應用程序運行時使用表單手動添加到列表中,則不會自行更新。

相關代碼: 主窗口,打開窗體中添加人列出

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

} 

窗口1,手動添加人列出

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!"); 
    } 
} 

那麼,怎樣才能我讓主窗口知道刷新信息?當我需要顯示這個列表時,這會變得特別有用,並且在人員被添加/刪除時自動更新。

謝謝

+0

您是否考慮過使用MVVM的正確設計模式?我的意思是,如果您想爲此框架命令編寫代碼,那麼如何更新它的答案與WinForms相同 - 告訴您要更新的控件,它需要自行刷新。顯然這就是Main.AddNewPatient應該做的事情,所以首先調試它,因爲你沒有提供給我們。 – hoodaticus

+0

同意@hoodaticus你的問題可能在Main.AddNewPatient中。你記得InvokeRequired嗎? –

回答

1

暴露newPatientList通過公共財產MainWindow.xaml.cs您在XAML綁定。它應該是一個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() + ")";