Ich entwickle ein WPF mit MVVM-Muster, C# und .NET Framework 4.6.1.Zugriff auf ein ViewModel von einem anderen ViewModel
Ich habe ein Fenster, das ein UserControl (Control1
) enthält und das UserControl ein anderes UserControl (Control2
) enthält. Ich habe diesen Weg gewählt, anstatt ein Dialogfenster zu verwenden (Control2
fungiert als Dialogfenster).
Beide Benutzersteuerelemente haben ein Viewmodel (Control1VM
und Control2VM
).
Ich benutze Control2
als ein Formular, um Benutzer einige Daten eingeben, die ich brauche, um die Anwendung zu starten.
Dies ist das Hauptfenster mit Control1
:
Und das ist Control2
über Control1
.
Mein Problem ist, dass ich weiß nicht, wie Control2
zu verstecken, wenn ich auf OK oder Abbrechen-Taste klicken Sie auf.
Dies ist, wie Control2
auf Control1
gesetzt:
<Grid x:Name="gridControl2" Margin="30" Grid.RowSpan="6" Grid.ColumnSpan="3" Visibility="{Binding GridControl2Visibility}">
<local:Control2 x:Name="userControlControl2" />
</Grid>
Control2
und setzen in Control1VM
GridControl2Visibility
-Visible
anzuzeigen:
public Visibility GridControl2Visibility
{
get { return gridControl2Visibility; }
set
{
if (gridControl2Visibility != value)
{
gridControl2Visibility = value;
RaisePropertyChangedEvent("GridControl2Visibility");
}
}
}
Wie ich Control2
verstecken kann, wenn ich auf OK oder Abbrechen klicken Knopf in Control2
? Mein Problem ist, dass GridControl2Visibility
auf Control1VM
ist und ich kann nicht auf diese Klasse von Control2VM
zugreifen.
Der übliche Weg dazu wäre mit den Messaging-Funktionen Ihres MVVM-Toolkits. – Lennart
Erstellen Sie auch eine VM für das Fenster, und behalten Sie darin die Instanz der untergeordneten VM. Die untergeordnete VM besteht wiederum aus ihrer untergeordneten VM-Instanz. Auf diese Weise können Sie den gesamten Code von Windows VM steuern. – ViVi