Ich beantworte meine eigene Frage, anderen zu helfen, alle Antworten finde ich an einem Ort zu finden, zu kämpfen. Was oben als ein geradliniges Problem erscheint, stellt tatsächlich mehrere Probleme dar, die ich im Folgenden ausreichend zu beantworten hoffe.
Hier geht.
Ihre WPF-Fenster, die als generischer Dialog dienen kann wie folgt aussehen:
<Window x:Class="Example.ModalDialogView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:ex="clr-namespace:Example"
Title="{Binding Path=mDialogWindowTitle}"
ShowInTaskbar="False"
WindowStartupLocation="CenterOwner"
WindowStyle="SingleBorderWindow"
SizeToContent="WidthAndHeight"
ex:WindowCustomizer.CanMaximize="False"
ex:WindowCustomizer.CanMinimize="False"
>
<DockPanel Margin="3">
<StackPanel DockPanel.Dock="Bottom" Orientation="Horizontal" FlowDirection="RightToLeft">
<Button Content="Cancel" IsCancel="True" Margin="3"/>
<Button Content="OK" IsDefault="True" Margin="3" Click="Button_Click" />
</StackPanel>
<ContentPresenter Name="WindowContent" Content="{Binding}"/>
</DockPanel>
</Window>
Nach MVVM, der richtige Weg, um einen Dialog zu zeigen, ist durch einen Vermittler. Um einen Mediator zu verwenden, benötigen Sie in der Regel auch einen Service Locator. Für Mediator-spezifische Details siehe here.
Die Lösung, auf die ich mich einigte, beinhaltete die Implementierung einer IDialogService-Schnittstelle, die durch einen einfachen statischen ServiceLocator aufgelöst wird. This ausgezeichnete Codeprojekt Artikel hat die Details dazu. Beachten Sie this Nachricht im Artikel Forum. Diese Lösung löst auch das Problem, das Besitzerfenster über die ViewModel-Instanz zu finden.
Mit dieser Schnittstelle können Sie IDialogService.ShowDialog (ownerViewModel, dialogViewModel) aufrufen. Fürs Erste rufe ich dies vom Eigentümer ViewModel, was bedeutet, dass ich harte Referenzen zwischen meinen ViewModels habe.Wenn Sie aggregierte Ereignisse verwenden, werden Sie diese wahrscheinlich von einem Leiter anrufen.
Durch Festlegen der Mindestgröße für die Ansicht, die schließlich im Dialogfeld angezeigt wird, wird die Mindestgröße des Dialogfelds nicht automatisch festgelegt. Da die logische Struktur im Dialogfeld das ViewModel enthält, können Sie nicht nur an die Eigenschaften des WindowContent-Elements binden. This Frage hat eine Antwort mit meiner Lösung.
Die Antwort, die ich oben erwähne, enthält auch Code, der das Fenster auf den Besitzer zentriert.
Abschließend ist das Deaktivieren der Schaltflächen zum Minimieren und Maximieren etwas, das WPF nicht nativ ausführen kann. Die eleganteste Lösung, die IMHO verwendet, ist this.
Vielen Dank für Ihre Herangehensweise! –
Warum der anonyme Downvote? –