Отправка данных в не родительское окно - PullRequest
0 голосов
/ 07 марта 2012

У меня есть 2 частичных класса, Окно A (frmSchedule) и Окно B (frmAddLesson).Окно A содержит элемент управления ListView с привязкой к данным.Окно A открывает окно B, которое предназначено для создания нового объекта урока, и я хочу поместить данные этого урока обратно в окно A. Как я могу это сделать?Есть ли простой способ использовать переменные области приложения в C #?

Я пытался извлечь оба частичных класса из одного базового класса и использовать этот класс для передачи данных урока обратно в 1-е окно, но яне могу понять это.: (

Для получения дополнительной информации я выложил программу здесь:

У меня есть главное окно (fmrSchedule) с элементом управления ListView, привязанным к ObservableCollection: (Ради простотыЯ сделаю вид, что объект урока имеет только 1 важный элемент данных)

    <ListView Name="lstLessons" Margin="204,15,192,125" ItemsSource="{Binding Path=LessonList}">
        <ListView.View>
            <GridView>
                <GridViewColumn DisplayMemberBinding="{Binding Time}">Time</GridViewColumn>
            </GridView>
        </ListView.View>
    </ListView>

В коде:

public partial class frmSchedule : Window
{        
    public frmSchedule()
    {
        InitializeComponent();

        //ListView sample data
        aLesson = new Lesson();
        aLesson.Time = 9;
        m_myLessons.Add(aLesson);
        lstLessons.ItemsSource = LessonList;
    }

    Lesson aLesson;

    private ObservableCollection<Lesson> m_myLessons = new ObservableCollection<Lesson>();
    public ObservableCollection<Lesson> LessonList { get { return m_myLessons; } }

    //Add Lesson
    private void btnAdd_Click(object sender, RoutedEventArgs e)
    {
        //New frmAddLesson window
        frmAddLesson addLesson = new frmAddLesson();
        addLesson.Show();
    }

Кнопка управления btnAdd открывает вторую форму (frmAddLesson), который служит для создания нового объекта урока, который будет добавлен в список урока в главном окне: (в этом случае время устанавливается на основе выбора в выпадающем списке)

public partial class frmAddLesson : Window
{
    public frmAddLesson(System.DateTime? DateTime)
    {
        InitializeComponent();

        dateTime = DateTime;
        radPrivate.IsChecked = true;
    }

    //DateTime from calendar selection
    private DateTime? dateTime;
    //Lesson object
    private Lesson theLesson;

    //ADD LESSON
    private void btnAdd_Click(object sender, RoutedEventArgs e)
    {
        //Create new Lesson object
        theLesson = new Lesson();

        //Set Lesson property
        theLesson.Time = (int)cmbTime.SelectedValue; //Time

        this.Close();
    }
}

Класс урока:

public class Lesson
{
    public Lesson()
    {
        //Stuff for later
    }

    private int m_Time;

    public int Time { get { return m_Time; } set { m_Time = value; } }
}

1 Ответ

1 голос
/ 07 марта 2012
public partial class frmSchedule : Window 
{       
   ...  
   private void btnAdd_Click(object sender, RoutedEventArgs e)  
   {  
    //New frmAddLesson window  
    frmAddLesson addLesson = new frmAddLesson(this);  
    addLesson.Show();  
   }  

   public void AddLesson(Lesson lesson)
   {
     ...
   }
}

public partial class frmAddLesson : Window    
{
  public frmAddLesson(frmSchedule schedule)      
  {      
    InitializeComponent();      

    this.schedule = schedule;

    ...

  }    
  frmSchedule schedule;

  //ADD LESSON    
  private void btnAdd_Click(object sender, RoutedEventArgs e)    
  {    
    //Create new Lesson object    
    var theLesson = new Lesson();    

    //Set Lesson property    
    theLesson.Time = (int)cmbTime.SelectedValue; //Time    

    schedule.AddLesson(theLesson);

    this.Close();    
  }    
}    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...