2016-12-08 5 views
-1

このプロジェクトは、ユーザーがコースを選択できるようにするためのダイアログボックスを開きます。それが生み出す出力は、私には1つのコースから選択できるだけです。どのようにすべてのコースを表示するコースクラスを取得できますか?WPFアプリケーションで複数の値を出力するにはどうすればよいですか?

これは、メインウィンドウのファイルです:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Data; 
using System.Windows.Documents; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Imaging; 
using System.Windows.Navigation; 
using System.Windows.Shapes; 

namespace CreateClassesObjs 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 

     Course choice; 

     public MainWindow() 
     { 
      InitializeComponent(); 
     } 

     private void Window_Loaded(object sender, RoutedEventArgs e) 
     { 
      Course course1 = new Course(); 
      Course course2 = new Course(); 
      Course course3 = new Course(); 
      Course course4 = new Course(); 
      Course course5 = new Course(); 
      Course course6 = new Course(); 
      Course course7 = new Course(); 

      course1.setName("IT 145"); 
      course2.setName("IT 200"); 
      course3.setName("IT 201"); 
      course4.setName("IT 270"); 
      course5.setName("IT 315"); 
      course6.setName("IT 328"); 
      course7.setName("IT 330"); 



      this.comboBox.Items.Add(course1); 
      this.comboBox.Items.Add(course2); 
      this.comboBox.Items.Add(course3); 
      this.comboBox.Items.Add(course4); 
      this.comboBox.Items.Add(course5); 
      this.comboBox.Items.Add(course6); 
      this.comboBox.Items.Add(course7); 
     } 

     private void button_Click(object sender, RoutedEventArgs e) 
     { 
      choice = (Course)(this.comboBox.SelectedItem); 
      this.listBox.Items.Add(choice); 
     } 

    } 
} 

そして、これが私のファイルです。

namespace CreateClassesObjs 
{ 
    internal class Course 

    { 
     static string name; 

     public Course() 
     { 

     } 

     public string setName(string choice) 
     { 
      name = choice; 

      return name.ToString(); 

     } 

     /* 
     public string retrieveName(string choice) 
     { 
      name = choice; 
      return name.setName(); 
     } 
     */ 

     public override string ToString() 
     { 


      return name; 

     } 

    } 
} 

これが私の出力です: enter image description here

それは最後の値だけを印刷しています。これらのすべてを印刷するはずです。

course1.setName("IT 145"); 
course2.setName("IT 200"); 
course3.setName("IT 201"); 
course4.setName("IT 270"); 
course5.setName("IT 315"); 
course6.setName("IT 328"); 
course7.setName("IT 330"); 

ToStringはすべての前の文字列を取得することになっています。

答えて

1

ショート/迅速な答え(背後にコーディングするこだわっ):

コンボボックスのみを選択することが単一の項目をサポートしています。 ListBoxに置き換えることで、複数の選択項目を受け入れるようにListBoxを構成できます。これらはSelectedItemsプロパティで使用できます。

private void button_Click(object sender, RoutedEventArgs e) 
{ 
    foreach(var choice in this.listBoxSource.SelectedItems.OfType<Course>()) 
    { 
     this.listBox.Items.Add(choice); 
    } 
} 

長い答え(MVVMの道を行く):

バインディング適切なデータをサポートするために、コースのクラスにINotifyPropertyChangedのを実装します。

SelectedプロパティをCourseクラスに追加します。 選択プロパティのチェックボックスを含むコースを表示するソースリストボックスにDataTemplateを追加します。

これで、コースが選択されているかどうかを確認できるようになりました。これで、データバインディングを使用できるようになります。その結果、UIの背後にあるコードが少なくなり、変更、保守、(単体)テストが容易になります。

+0

助けてくれてありがとうございますが、私はそのファイルを2番目のものだけで編集するはずがありません。 – user2803555

0

ここで私はプログラムを動作させることができました。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Data; 
using System.Windows.Documents; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Imaging; 
using System.Windows.Navigation; 
using System.Windows.Shapes; 

namespace CreateClassesObjs 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 

     Course choice; 

     public MainWindow() 
     { 
      InitializeComponent(); 
     } 

     private void Window_Loaded(object sender, RoutedEventArgs e) 
     { 
      Course course1 = new Course("IT 145"); 
      Course course2 = new Course("IT 200"); 
      Course course3 = new Course("IT 201"); 
      Course course4 = new Course("IT 270"); 
      Course course5 = new Course("IT 315"); 
      Course course6 = new Course("IT 328"); 
      Course course7 = new Course("IT 330"); 

      course1.setName("IT 145"); 
      course2.setName("IT 200"); 
      course3.setName("IT 201"); 
      course4.setName("IT 270"); 
      course5.setName("IT 315"); 
      course6.setName("IT 328"); 
      course7.setName("IT 330"); 

      this.comboBox.Items.Add(course1); 
      this.comboBox.Items.Add(course2); 
      this.comboBox.Items.Add(course3); 
      this.comboBox.Items.Add(course4); 
      this.comboBox.Items.Add(course5); 
      this.comboBox.Items.Add(course6); 
      this.comboBox.Items.Add(course7); 
     } 

     private void button_Click(object sender, RoutedEventArgs e) 
     { 
      choice = (Course)(this.comboBox.SelectedItem); 
      this.listBox.Items.Add(choice); 
     } 

     class Course 
     { 
      private string name = ""; 


      public Course(string name) 
      { 
       this.name = name; 
      } 

      public void setName(string name) 
      { 
       this.name = name; 
      } 

      public string getName() 
      { 
       return name; 
      } 

      public override string ToString() 
      { 
       return getName(); 
      } 
     } 
    } 
} 
関連する問題