2016-03-13 3 views
0

У меня есть проект C# .net4, связанный с моделью базы данных EF MySql. В главном окне есть сетка данных, в которой отображается «Введенные таблицы», которые пользователь добавил в базу данных MySql. Когда пользователь дважды нажимает на строку сетки данных одного из «EnteredTickets», открывается окно (называемое редактированием), чтобы разрешить пользователю редактировать «Введенный билет», а затем «сохранить» редактирование. После завершения редактирования редактирование закрывается окно редактирования.Как обработать событие с маршрутизируемым клиентом

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

Чтобы сделать это после прочтения, я считаю, что мне нужно поднять событие, а затем «обработать» это событие в MainWindowxmal.cs. В частности, я выполняю шаги here. Как вы увидите, я добавил сообщение, чтобы узнать, что событие было поднято из окна редактирования. Однако я не обрабатывает событие правильно в главном окне как MessageBox я добавил в обработчик событий не отображается «Редактировать Закончено», это код у меня есть

В окне редактирования

public partial class EditTicket : Window 
{ 

    //public event EventHandler EditFinished; 
    // Create a custom routed event by first registering a RoutedEventID 
    // This event uses the bubbling routing strategy 
    public static readonly RoutedEvent EditFinishedEvent = EventManager.RegisterRoutedEvent(
    "EditFinished", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(EditTicket)); 

// Provide CLR accessors for the event 
    public event RoutedEventHandler EditFinished 
    { 
     add { AddHandler(EditFinishedEvent, value); } 
     remove { RemoveHandler(EditFinishedEvent, value); } 
    } 
// This method raises the EditFinished event 
    void RaiseEditFinishedEvent() 
    { 
     RoutedEventArgs newEventArgs = new RoutedEventArgs(EditTicket.EditFinishedEvent); 
     RaiseEvent(newEventArgs); 
     MessageBox.Show("Raised Routed"); 
    } 

событие возникает в кнопку «сохранить» щелчка следующий код и я получаю Messagebox «Поднятая Routed»

//raise editfinshed event 
      RaiseEditFinishedEvent(); 

Мои проблемы возникают на стороне Main Window

Код в

public MainWindow() 
    { 
     InitializeComponent(); 

     AddHandler(EditTicket.EditFinishedEvent, new RoutedEventHandler(RefreshEnteredTickets)); 
     Application.Current.MainWindow.WindowState = WindowState.Maximized; 
    } 

Мой код обработчика Главное окно это, но не действия

void RefreshEnteredTickets(object sender, RoutedEventArgs e) 
    { 
    MessageBox.Show ("Edit Finished"); 
    } 

Может ли один предложить, где я пошло не так, пожалуйста?

+0

Если вы не используете MVVM, то можете проверить это: http://stackoverflow.com/questions/803242/understanding-events-and-event-handlers-in-c-sharp?rq=1 – Ugur

+0

Хорошо спасибо. Пока ничего не осталось за кодом.Не переехал в MVVM –

ответ

1

Привет попробовать использовать простую регистрацию, как это:

Xaml код (главное окно)

<Window x:Class="RoutedEventSoHelpAttempt.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 
<Grid> 
    <Button Click="ButtonBase_OnClick">Show Edit Window</Button> 
</Grid> 

Xaml код (окно билет редактировать)

<Window x:Class="RoutedEventSoHelpAttempt.EditTicket" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="EditTicket" Height="300" Width="300"> 
<Grid> 
    <Button Content="Edit" Click="ButtonBase_OnClick"></Button> 
</Grid> 

код за

/// <summary> 
/// Interaction logic for MainWindow.xaml 
/// </summary> 
public partial class MainWindow : Window 
{ 
    EditTicket editTicket=new EditTicket(); 

    public MainWindow() 
    { 
     InitializeComponent(); 
     Loaded += OnLoaded; 
     Unloaded += OnUnloaded; 
    } 

    private void OnUnloaded(object sender, RoutedEventArgs routedEventArgs) 
    { 
     Loaded -= OnLoaded; 
     Unloaded -= OnUnloaded; 
     editTicket.EditFinished -= RefreshEnteredTickets; 

    } 

    private void OnLoaded(object sender, RoutedEventArgs routedEventArgs) 
    { 
     editTicket.EditFinished += RefreshEnteredTickets; 
    } 


    private void RefreshEnteredTickets(object sender, RoutedEventArgs e) 
    { 

    } 

    private void ButtonBase_OnClick(object sender, RoutedEventArgs e) 
    { 
     editTicket.Show(); 
    } 
} 

    /// <summary> 
/// Interaction logic for EditTicket.xaml 
/// </summary> 
public partial class EditTicket : Window 
{ 
    //public event EventHandler EditFinished; 
    // Create a custom routed event by first registering a RoutedEventID 
    // This event uses the bubbling routing strategy 
    public static readonly RoutedEvent EditFinishedEvent; 

    static EditTicket() 
    { 
     EditFinishedEvent = EventManager.RegisterRoutedEvent(
      "EditFinished", RoutingStrategy.Bubble, typeof (RoutedEventHandler), typeof (EditTicket)); 
    } 

    public EditTicket() 
    { 
     InitializeComponent(); 
    } 



    // Provide CLR accessors for the event 
    public event RoutedEventHandler EditFinished 
    { 
     add { AddHandler(EditFinishedEvent, value); } 
     remove { RemoveHandler(EditFinishedEvent, value); } 
    } 
    // This method raises the EditFinished event 
    void RaiseEditFinishedEvent() 
    { 
     RoutedEventArgs newEventArgs = new RoutedEventArgs(EditFinishedEvent, this); 
     RaiseEvent(newEventArgs); 
     MessageBox.Show("Raised Routed"); 
    } 

    private void ButtonBase_OnClick(object sender, RoutedEventArgs e) 
    { 
     RaiseEditFinishedEvent(); 
    } 
} 

Кроме того, вы можете посмотреть на следующей ссылке: here

Позвольте мне знать, если вам нужна дополнительная помощь.

С уважением.

+0

Большое спасибо, я посмотрю на ссылку и поработаю над этим, когда вернусь с работы сегодня вечером –

+0

Работал как шарм ... но что делает следующий код, поскольку он выглядит как конструктор static staticTicket() { EditFinishedEvent = EventManager.RegisterRoutedEvent ( «EditFinished», RoutingStrategy.Bubble, typeof (RoutedEventHandler), typeof (EditTicket)); }; –

+0

@IanW, так как EditFinishedEvent является статичным, я должен инициализировать его в статическом c'tor, вот ссылка на дополнительную информацию - http://www.c-sharpcorner.com/uploadfile/AmitSaxena/constructor-vs- статический-конструктор /. но вы можете удалить это и инициализировать встроенную строку EditFinishedEvent. – Ilan

Смежные вопросы