2016-07-22 17 views
0

Ich bin immer noch relativ neu in C# und Programmierung im Allgemeinen, so dass ich nicht sicher bin, ob ich diese Frage überhaupt richtig stellen kann, aber hier geht. Ich nehme derzeit eine Klasse für C# mit Visual Studio speziell, und die Aufgabe, die uns gegeben wurde, ist eine WPF-Anwendung, die der Lehrer zur Verfügung gestellt, und erstellen Sie dann eine .cs-Datei unseren Code eingeben, um die Anwendung ordnungsgemäß auszuführen. Es ist mir gelungen, Konsolenanwendungen sowie WPF-Anwendungen zu erstellen, die nur VB verwenden, aber ich bin mir nicht ganz sicher, wie diese beiden Konzepte miteinander funktionieren.WPF-Anwendung mit .cs

Bisher sieht mein Code wie folgt:

MainWindow.xaml (Ausbilder zur Verfügung gestellt):

<Window x:Class="CreateClassesObjs.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:local="clr-namespace:CreateClassesObjs" 
    mc:Ignorable="d" 
    Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded"> 
<Grid> 
    <ComboBox x:Name="comboBox" HorizontalAlignment="Left" Margin="66,37,0,0" VerticalAlignment="Top" Width="164" IsDropDownOpen="True"/> 
    <Button x:Name="button" Content="Select this course" HorizontalAlignment="Left" Margin="283,39,0,0" VerticalAlignment="Top" Width="166" Click="button_Click"/> 
    <ListBox x:Name="listBox" HorizontalAlignment="Left" Height="69" Margin="66,233,0,0" VerticalAlignment="Top" Width="164"/> 
    <Label x:Name="label" Content="Please select a course " HorizontalAlignment="Left" Margin="66,7,0,0" VerticalAlignment="Top" Width="383"/> 
    <Label x:Name="label1" Content="You have selected these courses:" HorizontalAlignment="Left" Margin="66,202,0,0" VerticalAlignment="Top" Width="176"/> 

</Grid> 

MainWindow.xaml.cs (Instructor Gestellt):

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

} 
} 

Und Course.cs (Der Code, an dem ich angefangen habe zu arbeiten):

Ich habe versucht, dies zusammen aus was Tutorials ich finden könnte, aber ich fühle mich wie ich es nur verwirren. Ich suche keine vollständige Antwort, sondern einen Anstoss in die richtige Richtung. Vielen Dank im Voraus!

+3

Was ist Ihre Frage? – SLaks

+2

Warum erbt "Course" 'MainWindow'? – SLaks

+1

Ich hoffe, dieser Kurs ist nicht dazu gedacht, irgendjemandem WPF beizubringen ... der Code des Ausbilders hat mich dazu gebracht, innerlich zu sterben. – Guttsy

Antwort

0

Sie sind wirklich nah daran, dies funktioniert. Sie müssen nur Ihre ToString Methode ändern. Ich schätze, dass Sie gerade so etwas wie dieses zu sehen:

example

Wenn Sie das nicht sehen, weil Sie nicht kompilieren kann, ich würde vorschlagen, eine neue CS-Datei für Ihren Kurs Objekt machen statt es in Ihre MainWindow Klasse eingekeilt haben. Es gibt keinen Grund überhaupt für eine partial Klasse hier.

WPF weiß derzeit nicht, wie ein Kurs in der ComboBox angezeigt wird. In einer normalen WPF-Anwendung würde man ein DataTemplate definieren, um der ComboBox mitzuteilen, wie ein Kurs präsentiert wird. Dank der Abscheulichkeit, die dein Lehrer geschaffen hat, haben wir diesen Luxus nicht. Stattdessen müssen Sie etwas in Ihrer ToString Methode zurückgeben, um es zu beschwichtigen. Ich werde dich herausfinden lassen, was das ist.

(Bitte beachten Sie:.. Dies ist ein gutes Beispiel dafür, wie NICHT WPF zu tun, auch zu einer Einführungs Ebene nicht Ihre Schuld mit allen Mitteln)

0

Ich hoffe, das hilft, aber hier ist, wie ich war in der Lage um das Programm zum Funktionieren zu bringen. Sie müssen Ihre Getter und Setter definieren und Ihren neuen Kurs ausdrucken.

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(); 
      } 
     } 
    } 
}