Ich habe gerade eine "Dialogbox-Lösung" für meine WPF/MVVM Anwendung, in der das ViewModel seine ViewModel-Eigenschaften geändert, und die Ansicht verwendet Trigger, um die Dialogbox usw. anzuzeigen und auszublenden, etc. Von einem UX Erfahrung ist zufriedenstellend.Kann ich jetzt eine View dazu bringen, eine andere View zu instanziieren, die darüber wie eine DialogueBox erscheint?
Doch die „Dialog“, die ich benutze, ist ein Border Element, das seine Sichtbarkeit Eigenschaft Visible und Komprimiert wird umgeschaltet zwischen, so dass es nicht wirklich „Pop-up“, sondern nur eine Art von "springt" in die Anwendung ein.
So Ich möchte, dass meine Lösung so dass das Dialogfeld tatsächlich erscheint wie ein klassisches MessageBox erweitern.
Zur Zeit habe ich dies:
<Style x:Key="DialogueBoxDelete" TargetType="Border">
<Style.Triggers>
<DataTrigger Binding="{Binding DialogueBoxDeleteStatus}" Value="show">
<Setter Property="Border.Visibility" Value="Visible"/>
</DataTrigger>
<DataTrigger Binding="{Binding DialogueBoxDeleteStatus}" Value="hide">
<Setter Property="Border.Visibility" Value="Collapsed"/>
</DataTrigger>
</Style.Triggers>
</Style>
Da ich verstehe, dass es für die Testbarkeit von MVVM wichtig ist, dass mein Viewmodel nicht meine DialogueBox Ansicht nicht instanziiert aber, dass meine Ansicht instanziiert die DialogueBox Ansicht, ich bin denken ich so etwas wie dieses brauchen würde:
PSEUDO-CODE:
<Style x:Key="DialogueBoxDelete" TargetType="Border">
<Style.Triggers>
<DataTrigger Binding="{Binding DialogueBoxDeleteStatus}" Value="show">
<InstantiateDialogueWindow .../>
</DataTrigger>
<DataTrigger Binding="{Binding DialogueBoxDeleteStatus}" Value="hide">
<RemoveWindow.../>
</DataTrigger>
</Style.Triggers>
</Style>
Aber was ist die Syntax dafür? Wie kann mein UserControl ein anderes Fenster instanziieren, das über der aktuellen Anwendung schwebt?
Werfen Sie einen Blick auf MVVM Toolkit Light von Laurent Bugnion, er implementiert in seiner Visual Studio Vorlage ein Dialogue Fenster, wie Sie hier in Code-Behind mit einem Messaging-Service beschreiben: http://www.galasoft.ch/mvvm/getstarted –
Aber ist es immer noch testbar, wenn hier hinter dem Code Code steckt? –
Deshalb würde ich es lieber in das ViewModel einfügen (siehe meinen letzten Absatz). Dann ist es * Unit-Testable. –