Laden...

erledigt: Aus XAML-Ressource eine Methode im CodeBehind aufrufen

Erstellt von m.grauber vor 11 Jahren Letzter Beitrag vor 11 Jahren 3.565 Views
M
m.grauber Themenstarter:in
343 Beiträge seit 2010
vor 11 Jahren
erledigt: Aus XAML-Ressource eine Methode im CodeBehind aufrufen

Hallo,

im XAML habe ich folgenden Ressource-Code:


<UserControl.Resources>
        <DataTemplate x:Key="MyTemplate">
            <local:MyUserControl/>
...

So wird beim Aufruf zwar von MyUserControl.xaml (einem Usercontrol) eine neue Instanz gebildet und steht zur Verfügung.

**
Ich möchte aber an dieser Stelle stattdessen nur eine im CodeBehind definierte Methode ausführen. - Auf den DataContext möchte ich aber in der Methode trotzdem zugreifen; er muss also mit "übergeben" werden. Wie geht das?**

Danke!

Mfg
Michael

PS: Ich stelle nur Fragen, wenn ich in Büchern, im Web und in Foren nichts gefunden habe. Dumme Fragen bitte ich zu entschuldigen!

:] VISUAL STUDIO 2017 + .NET FRAMEWORK 4.5 + SQL-Server 2012 :]

1.378 Beiträge seit 2006
vor 11 Jahren

Ich behaupte mal garnicht aber eventuel gibts ja alternive Möglichkeiten. Was macht die aufgerufene Methode in etwa und zu welchem Zeitpunkt soll sie aufgerufen werden? Vor, während oder nach dem Laden des Controls?

Lg, XXX

M
m.grauber Themenstarter:in
343 Beiträge seit 2010
vor 11 Jahren

Hallo xxxprod,

das ist ein UserControl welches bei einer bestimmten Aktion dieses Template "auslöst". - Bitte nicht über meine seltsame Beschreibung lachen 🙂

Dabei wird MyUserControl erstellt. - Ich möchte aber statt der Zeile


   <local:MyUserControl/>

dass nicht das MyUserControl.xaml erstellt wird, sondern eine Methode im CodeBehind des gleichen Controls aufgerufen wird:


   <local:MyMethode/>             // geht natürlich nicht

Wie lautet die korrekte Syntax, um auf meine Methode zu verweisen?

Danke!

Mfg
Michael

PS: Ich stelle nur Fragen, wenn ich in Büchern, im Web und in Foren nichts gefunden habe. Dumme Fragen bitte ich zu entschuldigen!

:] VISUAL STUDIO 2017 + .NET FRAMEWORK 4.5 + SQL-Server 2012 :]

1.378 Beiträge seit 2006
vor 11 Jahren

Gibt es denn keine passenden Events die bei der bestimmten Aktion die gewünschte Aktion ausführt? Ich finde deine Variante ein Dummy UserControl zu verwenden in der Situation nicht so schlimm, was stört dich daran?

//Edit: Hier hab ich was dazu gefunden: Über Trigger sollte es so möglich sein: Function call within XAML code?

5.658 Beiträge seit 2006
vor 11 Jahren

Hi m.grauber,

ich weiß zwar immer noch nicht genau, was du eigentlich damit vor hast, aber mit ziemlicher Sicherheit bist du völlig auf dem Holzweg damit. Du kannst nicht irgendwo im XAML plötzlich Code ausführen und eine Methode aufrufen. Entweder reagierst du auf Events, führst Commands aus oder verwendest einen ObjectDataProvider.
Vielleicht findet man ja eine geeignete Lösung, wenn du uns verrätst, was du damit eigentlich erreichen willst.

Christian

Weeks of programming can save you hours of planning

M
m.grauber Themenstarter:in
343 Beiträge seit 2010
vor 11 Jahren

Hallo Christian,

auch Dir vielen Dank! 👍 Die Zeilen


<UserControl.Resources>
        <DataTemplate x:Key="MyTemplate">
            <local:MyUserControl/>
... 

"führen" in einer bestimmten Situation dazu, dass MyUserControl.xaml geladen wird.

Wie kann ich stattdessen MyMethode "laden", die sich im Codebehind befindet? - ** Theoretisch möchte ich nur diese eine Zeile ändern. **

Aufgrund von xxxprod versuche ich es gerade mit DataTemplate.Triggers, bekomme es aber nicht hin.

Das UserControl ist leider geschlossen und der Kollege, der das programmiert hat, ist nicht mehr da. Auf jeden Fall wird immer dieses MyUserControl ausgeführt und das klappt derzeit ja auch. - Ich möchte nur eine andere Methode angeben, statt einem UserControl zu öffnen.

Ist vielleicht der Grund, warum der Kollege das damals so gemacht hat, dass es anders nicht geht? X( X(

Also mir ist klar, dass ich aus dem XAML-Code nicht auf Public oder Static Methoden zugreifen kann. Jedoch auf DependencyProperties. Leider klappt auch das nicht:


<UserControl.Resources>
        <DataTemplate x:Key="MyTemplate">
            <local:MyDependencyProperty/>
... 

(dabei ist MyDependencyProperty im aktuellen UserControl eine korrekt erstellte DependencyProperty. Dort könnte ich dann zumindest etwas abonieren).

Mfg
Michael

PS: Ich stelle nur Fragen, wenn ich in Büchern, im Web und in Foren nichts gefunden habe. Dumme Fragen bitte ich zu entschuldigen!

:] VISUAL STUDIO 2017 + .NET FRAMEWORK 4.5 + SQL-Server 2012 :]

M
m.grauber Themenstarter:in
343 Beiträge seit 2010
vor 11 Jahren

Hallo xxxProd und Christian,

also dieses Control vom alten Kollegen ist wirklich des Wahnsinns. - Ich werde es nun selbst "nachbauen" und daher benötige ich nun keine Lösung mehr. Dann kann ich es an dieser Stelle auch anders lösen.

Vielen Dank nochmals.

Mfg
Michael

PS: Ich stelle nur Fragen, wenn ich in Büchern, im Web und in Foren nichts gefunden habe. Dumme Fragen bitte ich zu entschuldigen!

:] VISUAL STUDIO 2017 + .NET FRAMEWORK 4.5 + SQL-Server 2012 :]

925 Beiträge seit 2004
vor 11 Jahren

Irre ich mich, oder hat der Kollege das Control völlig am Konzept von WPF vorbei entwickelt?