Autor Beitrag
ticcoid
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Di 14.04.09 16:59 
hallo,

ich habe folgendes vor. ich habe in silverlight ein datagrid und habe dazu ein event (PreparingCellForEdit) das gefeuert wird sobald ich eine zelle bearbeiten will. wenn das passiert ist dann wird anschließend ein zweites event gefeuert (LostFocus). ich möchte eigentlich "nur" folgendes erreichen.

das object sender was im event PreparingCellForEdit will ich auch im event LostFocus haben. wie genau stelle ich das an, dass es da ist? ich müsste das doch irgenwie mit einem delegaten hinkriegen oder? Hat jemand eine Idee?

Vielen Dank



ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
private void datagrid1_PreparingCellForEdit(object sender, DataGridPreparingCellForEditEventArgs e)
{
    datagrid1.LostFocus += new RoutedEventHandler(datagrid1_LostFocus);
}

void datagrid1_LostFocus(object sender, RoutedEventArgs e)
{
    // hier ist dann code         
}


Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mi 15.04.09 11:09 
:welcome:

Hört sich so an, als ob das normalerweise auch ohne so einen Hack funktionieren sollte ;) .
Ich würde jedenfalls im Prepare-Eventhandler einem Klassenfeld den sender-Parameter zuweisen. Im LostFocus liest du dann dieses Feld aus und setzt es am Schluss auf null, damit jeder sender nur genau einmal verarbeitet wird.

_________________
>λ=
_Joe_
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 47

Arch Linux/XP
VS2008 Prof.,Codeblocks
BeitragVerfasst: Sa 16.05.09 12:06 
user profile iconticcoid hat folgendes geschrieben Zum zitierten Posting springen:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
private void datagrid1_PreparingCellForEdit(object sender, DataGridPreparingCellForEditEventArgs e)
{
    datagrid1.LostFocus += new RoutedEventHandler(datagrid1_LostFocus);
}

void datagrid1_LostFocus(object sender, RoutedEventArgs e)

  Dispatcher.BeginInvoke(delegate()
  {

    // hier ist dann code         
   });
}


Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt


so sollte es klappen, wenn es überhaupt noch aktuell ist
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Sa 16.05.09 13:08 
Was hat denn der Dispatcher mit der Frage zu tun? Und auf den PreparingCellForEdit-Sender hast du so immer noch keinen Zugriff.
Wollte man es unbedingt mit Closures machen, dann am ehesten so:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
private void datagrid1_PreparingCellForEdit(object sender, DataGridPreparingCellForEditEventArgs e)
{
  RoutedEventHandler handler = null;
  handler = delegate {
    // hier sender verwenden
    datagrid1.LostFocus -= handler;
  };
  datagrid1.LostFocus += handler;
}

Naja, hab schon hübscheren Code gesehen ;) .

_________________
>λ=