2013-06-05 45 views
0

我有一個C#項目有:顯示數據

的XAML代碼:

<Window x:Class="Revision.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Patient Information" Height="456.36" Width="935.208"> 
<Window.Resources> 
    <Style x:Key="SliderStyle"> 
     <Setter Property="FrameworkElement.Width" Value="100"/> 
     <Setter Property="RangeBase.Minimum" Value="0"/> 
     <Setter Property="RangeBase.Maximum" Value="100"/> 
     <Setter Property="Slider.IsSnapToTickEnabled" Value="true"/> 
     <Setter Property="FrameworkElement.VerticalAlignment" Value="Center"/> 
     <Setter Property="RangeBase.Value" Value="0"/> 
     <Setter Property="Slider.AutoToolTipPlacement" Value="TopLeft"/> 


    </Style> 
</Window.Resources> 
<Grid> 
    <Label Content="First Name" Height="28" HorizontalAlignment="Left" Margin="19,23,0,0" Name="label1" VerticalAlignment="Top" /> 
    <Label Content="Last Name" Height="28" HorizontalAlignment="Left" Margin="19,82,0,0" Name="label2" VerticalAlignment="Top" /> 
    <Label Content="Address" Height="28" HorizontalAlignment="Left" Margin="20,144,0,0" Name="label3" VerticalAlignment="Top" /> 
    <Label Content="Security Type" Height="28" HorizontalAlignment="Left" Margin="19,203,0,0" Name="label4" VerticalAlignment="Top" /> 
    <TextBox Height="36" HorizontalAlignment="Left" Margin="105,23,0,0" Name="textBox1" VerticalAlignment="Top" Width="197" /> 
    <TextBox Height="36" HorizontalAlignment="Left" Margin="105,82,0,0" Name="textBox2" VerticalAlignment="Top" Width="197" /> 
    <TextBox Height="36" HorizontalAlignment="Left" Margin="105,136,0,0" Name="textBox3" VerticalAlignment="Top" Width="197" /> 
    <ComboBox Height="36" Margin="105,195,625,0" Name="comboBox1" VerticalAlignment="Top"> 
     <ComboBoxItem Content="Private Assurance" Name="PrA"/> 
     <ComboBoxItem Content="Public Assurance" Name="PA"/> 
     <ComboBoxItem Content="No Assurance" Name="NA"/> 
    </ComboBox> 
    <Button Content="Submit" Height="33" HorizontalAlignment="Left" Margin="147,365,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click"/> 
    <Button Content="Display" Height="33" HorizontalAlignment="Left" Margin="227,365,0,0" Name="button2" VerticalAlignment="Top" Width="75" Click="button2_Click" /> 
    <Label Content="Gender" HorizontalAlignment="Left" Margin="20,255,0,0" VerticalAlignment="Top"/> 
    <RadioButton x:Name="maleRadio" Content="Male" HorizontalAlignment="Left" Margin="105,266,0,0" VerticalAlignment="Top"/> 
    <RadioButton x:Name="femaleRadio" Content="Female" HorizontalAlignment="Left" Margin="192,266,0,0" VerticalAlignment="Top"/> 
    <Slider x:Name="redSlider" Style="{StaticResource SliderStyle}" Value="{Binding Text, ElementName=textBox5}" Margin="74,313,636,56" SmallChange="1" Height="56" Width="Auto" /> 
    <TextBox x:Name="textBox5" Text="{Binding Value, ElementName=redSlider}" Margin="296,313,588,86" SelectionOpacity="1" FontSize="13" /> 
    <Label Content="Age" HorizontalAlignment="Left" Margin="38,313,0,0" VerticalAlignment="Top"/> 
    <ListView x:Name="ListView1" HorizontalAlignment="Left" Height="375" Margin="344,23,0,0" VerticalAlignment="Top" Width="567"> 
     <ListView.View> 
      <GridView> 
       <GridViewColumn Header="First Name" Width="100" 
DisplayMemberBinding="" /> 
       <GridViewColumn Header="Last Name" Width="80" 
DisplayMemberBinding="" /> 
       <GridViewColumn Header="Address" Width="100" 
DisplayMemberBinding="" /> 
       <GridViewColumn Header="Security Type" Width="80" 
DisplayMemberBinding="" /> 
       <GridViewColumn Header="Gender" Width="100" 
DisplayMemberBinding="" /> 
       <GridViewColumn Header="Age" Width="100" 
DisplayMemberBinding="" /> 
      </GridView> 
     </ListView.View> 
    </ListView> 
</Grid> 
</Window> 

,我有一類患者:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace Revision 
{ 
class Patient 
{ 
    public string firstname { get; set; } 
    public string lastname { get; set; } 
    public string Address { get; set; } 
    public string securityType {get; set;} 
    public string gender { get; set; } 
    public string age { get; set; } 

    public Patient(string fn, string ln, string ad, string st,string ge,string ag) 
    { 

     firstname = fn; 
     lastname = ln; 
     Address = ad; 
     securityType = st; 
     gender = ge; 
     age = ag; 

    } 
    public override string ToString() 
    { 

     return string.Format("{0,-10} {1,-10} {2,-10} {3,-10} {4,-10} {5,-10}", 

      firstname, lastname, Address, securityType, gender,age); 
    } 
} 
} 

和主程序

public partial class MainWindow : Window 
{ 
    // Patient [] patients = new Patient{} 
    Patient [] patients = new Patient[100]; 
    private List<Patient> books = new List<Patient>(); 
    int i=0; 
    string g; 
    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, RoutedEventArgs e) 
    { 
     string x = ""; 
     if (PrA.IsSelected) 
     { 
      x = PrA.Content.ToString(); 
     } 

     else if (PA.IsSelected) 
     { 
      x = PA.Content.ToString(); 
     } 
     else if (NA.IsSelected) 
     { 
      x = NA.Content.ToString(); 
     } 

     if (maleRadio.IsChecked == true) 
      g = "Male"; 
     if(femaleRadio.IsChecked==true) 
      g="Female"; 

     patients[i] = new Patient(
      textBox1.Text, textBox2.Text, textBox3.Text, g, textBox5.Text, x); 
     i = i + 1; 
     // Patient[] patients = { 
     //      new Patient (
      // textBox1.Text, textBox2.Text, textBox3.Text, x)}; 

     textBox1.Clear(); 
     textBox2.Clear(); 
     textBox3.Clear(); 

     textBox5.Clear(); 


    } 
} 

所以問題我wa nt顯示在文本框中輸入的數據,單選按鈕和組合框...在列表視圖中

+3

'公共病人(字符串fn,字符串ln,字符串廣告,字符串st,字符串ge,字符串ag)' - OMG夥計,請不要創建那樣的構造函數。改爲使用Object Initializer Syntax,否則給出構造函數參數的正確名稱。 –

+0

你不回覆我的問題 –

+0

不,因爲你的代碼是一場災難。你必須學習MVVM,而不是手動從文本框中讀取東西。使用數據綁定。 –

回答

1

將數據導入到列表視圖中的正常方法是通過數據綁定。數據綁定是WPF用於在視圖和代碼之間傳輸數據的方式。

所有可顯示多個項目的wpf控件,如listview,listbox,combobox等,都有ItemSource屬性。通過將此屬性設置爲可枚舉,視圖將顯示集合中的每個項目。

默認情況下,它將只顯示每個項目作爲文本塊,顯示每個對象上調用ToString()的結果。有幾種方法來定製這個。在你的情況下,你已經定義了列爲GridViewGridViewColumn。每個GridViewColumn都有一個DisplayMemberBinding,它可以綁定到要在該列中顯示的屬性。

所以...

我不知道你是多麼容易使用它。正如其他人所提到的,您應該瞭解一下wpf中的綁定以及Model-View-ViewModel(MVVM)模式。 MVVM確實有助於保持代碼清潔。

反正...

你的觀點可能被更改爲這樣的事:

<ListView x:Name="ListView1" HorizontalAlignment="Left" Height="375" Margin="344,23,0,0" VerticalAlignment="Top" Width="567" ItemsSource="{Binding patients}"> 
     <ListView.View> 
      <GridView> 
       <GridViewColumn Header="First Name" Width="100" DisplayMemberBinding="{Binding path=firstname}" /> 
       <GridViewColumn Header="Last Name" Width="80" DisplayMemberBinding="{Binding path=lastname}" /> 
       <GridViewColumn Header="Address" Width="100" DisplayMemberBinding="{Binding path=Address}" /> 
       <GridViewColumn Header="Security Type" Width="80" DisplayMemberBinding="{Binding path=securityType}" /> 
       <GridViewColumn Header="Gender" Width="100" DisplayMemberBinding="{Binding path=gender}" /> 
       <GridViewColumn Header="Age" Width="100" DisplayMemberBinding="{Binding path=age}" /> 
      </GridView> 
     </ListView.View> 
    </ListView> 

我的病人的固定大小的數組更改爲ObservableCollection<Patient>。一個可以增長的集合幾乎總是好於一個固定大小的集合。 ObservableCollection<>也有一些額外的技巧。每當添加或刪除項目時,它都會通知視圖。請參閱wpftutorial.net。你會發現一個不錯的introduction to bindingMVVM和更多。

+0

謝謝你先生 –