hat jemand ein Beispiel oder eine Anleitung zur Verwendung von Caliburn Micro zusammen mit ModernUi (https://mui.codeplex.com)?Caliburn Micro und ModernUI Beispiele/Lernprogramme
Antwort
Ok, so hatte ich eine schnelle Durcheinander über mit ihm und einem Blick auf den Mui Foren und dies scheint die beste Lösung zu sein:
Seit dem Fenster lädt Inhalt von URLs, die Sie benötigen einen Blick-First-Ansatz nehmen , und suchen Sie dann die entsprechende VM und binden Sie die beiden.
Der beste Weg, dies zu tun, scheint über die ContentLoader
Klasse zu sein, die verwendet wird, um den Inhalt in den ModernWindow
zu laden, wenn es angefordert wird. Sie können nur DefaultContentLoader
Unterklasse und die notwendige CM Magie liefern geladene Elemente zu verbinden:
public class ModernContentLoader : DefaultContentLoader
{
protected override object LoadContent(Uri uri)
{
var content = base.LoadContent(uri);
if (content == null)
return null;
// Locate the right viewmodel for this view
var vm = Caliburn.Micro.ViewModelLocator.LocateForView(content);
if (vm == null)
return content;
// Bind it up with CM magic
if (content is DependencyObject)
{
Caliburn.Micro.ViewModelBinder.Bind(vm, content as DependencyObject, null);
}
return content;
}
}
Ihr CM Bootstrap-Programm sollte nur ein ModernWindow
Viewmodel Bootstrap, die durch eine ModernWindow
basierte Sicht gesichert ist (CM versucht EnsureWindow
zu verwenden, die eine schafft neue Basis WPF Window-Klasse, es sei denn natürlich Ihre Kontrolle erbt bereits von Window
die ModernWindow
tut Wenn Sie alle Dialoge und Popups müssen MUI sein, Sie könnten WindowManager
neu zu implementieren müssen.):
public class Bootstrapper : Bootstrapper<ModernWindowViewModel>
{
}
, der einen Leiter (OneActive) und sieht wie folgt sein:
public class ModernWindowViewModel : Conductor<IScreen>.Collection.OneActive
{
}
Und XAML für die Ansicht ist
ModernWindowView.xaml
<mui:ModernWindow x:Class="WpfApplication4.ViewModels.ModernWindowView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mui="http://firstfloorsoftware.com/ModernUI"
Title="ModernWindowView" Height="300" Width="300" ContentLoader="{StaticResource ModernContentLoader}">
<mui:ModernWindow.MenuLinkGroups>
<mui:LinkGroupCollection>
<mui:LinkGroup GroupName="Hello" DisplayName="Hello">
<mui:LinkGroup.Links>
<mui:Link Source="/ViewModels/ChildView.xaml" DisplayName="Click me"></mui:Link>
</mui:LinkGroup.Links>
</mui:LinkGroup>
</mui:LinkGroupCollection>
</mui:ModernWindow.MenuLinkGroups>
</mui:ModernWindow>
Offensichtlich müssen Sie auch den Loader eine Ressource machen:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/FirstFloor.ModernUI;component/Assets/ModernUI.xaml" />
<ResourceDictionary Source="/FirstFloor.ModernUI;component/Assets/ModernUI.Dark.xaml"/>
<ResourceDictionary>
<framework:ModernContentLoader x:Key="ModernContentLoader"></framework:ModernContentLoader>
<wpfApplication4:Bootstrapper x:Key="Bootstrapper"></wpfApplication4:Bootstrapper>
</ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
Hier ist die ChildViewModel
ich als bin mit Test:
public class ChildViewModel : Conductor<IScreen>
{
public void ClickMe()
{
MessageBox.Show("Hello");
}
}
Und das XAML für die (nur eine Taste)
<UserControl x:Class="WpfApplication4.ViewModels.ChildView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="350" Width="525">
<Grid>
<StackPanel>
<TextBlock >Hello World</TextBlock>
<Button x:Name="ClickMe" Width="140" Height="50">Hello World</Button>
</StackPanel>
</Grid>
</UserControl>
Und die Proof of Concept:
Großartig, danke! – Matthias
Hey Charleh, danke nochmal für deine Antwort. Es gibt noch ein Problem: Wenn der ViewLocator im ContentLoader nach dem passenden Viewmodel sucht, gibt er immer null zurück und es ist keine Bindung mehr vorhanden. Irgendeine Idee? – Matthias
Charleh, könnten Sie Ihre Arbeitsbeispielquelle irgendwo hochladen? – Matthias
ich eine sehr, sehr einfache Probe Chat-App mit Modern UI für WPF, Caliburn Micro und MEF.
https://github.com/gblmarquez/mui-sample-chat
Ich hoffe, es
- 1. Tombstoning in Caliburn Micro
- 2. Welche bootstraper für Caliburn Micro
- 3. WPF-Kontextmenüs in Caliburn Micro
- 4. URF mit WPF MVVM Caliburn Micro
- 5. IEnumerable <IResult> - Caliburn micro
- 6. Bind Caliburn Micro EF Entity Fehler
- 7. TreeView DataBinding-Probleme mit Silverlight und Caliburn Micro
- 8. Silverlight, Caliburn, Actions und DataGrids
- 9. WPF + Caliburn Micro: wie Fenster Event zu schließen?
- 10. Caliburn Micro Message.attach berücksichtigt Änderungen von Datenkontext nicht
- 11. Trigger-Methode des Elements innerhalb des Itemscontrol mit Caliburn Micro
- 12. PRISM und Caliburn kombiniert
- 13. Micro-Dienste und .NET
- 14. Jhipster Micro und Hystrix
- 15. Wie kann ich eine bestimmte Singleton-Instanz mit dem Simple Container von Caliburn Micro registrieren?
- 16. Caliburn Micro, Verwendung von ContentControl (oder Anzeige von 'Sub' ViewModel) mit ViewModel Zuerst
- 17. ModernUI: Aktuelles Design auf UserControl anwenden BackGround
- 18. Organisieren Ansichten und ViewModels in Caliburn Framework
- 19. Caliburn - ShellFramework - Show.MessageBox
- 20. Caliburn Element Konvention
- 21. Smart JVM und JIT Micro-Optimierungen
- 22. Caliburn 3 sieht keine Ansicht
- 23. Was ist Caliburn Validierung Abstraktion
- 24. Vergleiche und vergleiche Caliburn gegen MVVM Light Toolkit (hauptsächlich für Silverlight)?
- 25. Migration von t1.micro zu t2.micro Amazon AWS
- 26. Grab micro-controller info
- 27. Micro Service Sicherheit
- 28. Payara micro - persistenter Timer
- 29. .NET Micro Framework Tutorials?
- 30. Laravel micro von Datenbank
hilft ich kann mir vorstellen, da ModernUI wie eine Sammlung von Kontrollen sieht, die Sie gerade benötigen würden die Konventionen für jedes Steuerelement in dem Toolkit hinzuzufügen. Der einzige Unterschied wäre, dass CM ChildWindow für die meisten seiner Fensterverwaltung verwendet, und Sie möchten dies wahrscheinlich durch ModernWindow in Ihrer Implementierung ersetzen. Ich denke, dass Sie wahrscheinlich nur Ihre eigene Implementierung für WindowManager (und insbesondere "EnsureWindow" -Methode) http://caliburnmicro.codeplex.com/SourceControl/changeset/view/35582bb2a8dfdd3fcd71a07fa82581ddb93a786f#src/Caliburn.Micro.Silverlight/WindowManager bereitstellen müssen. cs – Charleh
Nun, nach einem Blick scheint es komplexer zu sein.Ich denke, dass die Bereitstellung Ihrer eigenen WindowManager-Implementierung möglicherweise nicht die beste Idee ist, da alle Popups auch die 'ModernWindow'-Klasse implementieren würden. Außerdem sieht es so aus, als würde es Inhalte basierend auf Ressourcen-URLs dynamisch laden, und daher würde ein Viewmodel-First-Ansatz wahrscheinlich nicht funktionieren. – Charleh