Laden...

UserControl (XAML) -> Methoden nutzen

Erstellt von Cannon vor 10 Jahren Letzter Beitrag vor 10 Jahren 1.868 Views
C
Cannon Themenstarter:in
282 Beiträge seit 2008
vor 10 Jahren
UserControl (XAML) -> Methoden nutzen

Ich wusste nicht so recht, wie ich das Thema nennen sollte. In einem eigenen UserControl, welches ich per XAML in mein View eingebunden habe möchte ich eine Methode aufrufen. Allerdings gestaltet das sich nicht so einfach, denn ich möchte nicht mit View und ViewModel arbeiten - zumindest innerhalb des Controls. Wie komme ich also an meine Methode ran ohne 2 Instanzen zu haben? Beispiel:

UserControl:


public class MyUserControl : UserControl
{
....
    public void Show()
    {
        this.Visibility = Visibility.Visible;
    }
}

Anwendung:

View:


<mycontrols:MyUserControl>

ViewModel:


...
myctrl = new MyUserControl();
myctrl.Show();

Geht natürlich nicht so, weil falsche Instanz. Wie bekomtm man das hin?

S
417 Beiträge seit 2008
vor 10 Jahren

Hallo Cannon,

du vergibst einfach einen Namen für dein Control, danach kannst du auch drauf zugreifen, z.B.:

<mycontrols:MyUserControl x:Name="myctrl">

Wobei ich für "x" hier vom Standard xml namespace ausgehe, der im Root Knoten definiert ist:

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
C
Cannon Themenstarter:in
282 Beiträge seit 2008
vor 10 Jahren

In der Codebehind der View geht das, aber im ViewModel nicht. Macht ja auch keinen Sinn, da ich dann wohl den Sinn des MVVM-Patterns umgehe.

S
417 Beiträge seit 2008
vor 10 Jahren

Ok, dann habe ich deine Frage falsch verstanden.
Du schreibst ja:

denn ich möchte nicht mit View und ViewModel arbeiten

aber scheinbar ja doch mit ViewModel?!

Bei der momentanen Fragestellung verstehe ich leider nicht was du möchtest.

C
Cannon Themenstarter:in
282 Beiträge seit 2008
vor 10 Jahren

Sorry für das Missverständnis. Ich möchte bei dem Design des UserControls ohne MVVM arbeiten. Die Anwendung die das UserControl nutzt verwendet aber MVVM. Deshalb auch die Code-Beispiele.

5.657 Beiträge seit 2006
vor 10 Jahren

Hi Cannon,

wieso willst du im ViewModel eine Methode eines Controls in deiner View aufrufen? Das von dir gepostete Beispiel läßt sich doch viel einfacher lösen, wenn du das entsprechende ViewModel-Property an eine Eigenschaft namens "Visibility" bindest.

Christian

Weeks of programming can save you hours of planning

C
Cannon Themenstarter:in
282 Beiträge seit 2008
vor 10 Jahren

Klar wäre es einfacher. Allerdings war das hier nur ein Beispiel. Im Falle einer MessageBox müsste ich dann etliche Properties daran binden und ich finde das Ganze dann etwas unübersichtlich.

5.657 Beiträge seit 2006
vor 10 Jahren

Im Falle einer MessageBox

Du möchtest aus dem ViewModel ein UserControl in der View anweisen, eine MessageBox anzuzeigen? Das ist keine gute Idee. Schau mal hier: Handling Dialogs in WPF with MVVM.

Christian

Weeks of programming can save you hours of planning

C
Cannon Themenstarter:in
282 Beiträge seit 2008
vor 10 Jahren

Also im Prinzip geht es in den meisten Beispielen darum den Dialog in der View zu erzeugen und an Properties zu binden. Nur die Frage die sich stellt, wie sinnvoll ist es die ganzen Properties einzusetzen für den Dialog? Ich rede hier über die Buttons, den Titel, den Content und natürlich auch den Result, den ich sowohl an einen ICommand binden kann oder auch als Property zurückgeben kann. Soll das der Sinn sein? Das Prinzip ist mir klar und im Moment teste ich das auch so. Aber als endgültige Lösung gefällt mir das nicht.

Andererseits könne ich aber eine Art DialogModel dazwischen setzen und dort die ganzen Properties reinpacken. Der DataContext zeigt dann auf das Model und ich brauche die ganzen Properties nicht in meinem "MainViewModel" drin zu haben. Ein Beispiel gab es ja dazu auch.