Mit einer ListBox (oder andere ItemsControl) host Caliburn Moderatoren
-
05-07-2019 - |
Frage
Wenn ich ein MultiPresenter
und ich bin mit ein ListBox
zur Anzeige der Presenters
es ist Gastgeber, wie bekomme ich die Caliburn zu entdecken und zu binden, die Ansichten und ansichtsmodelle für die Einzelteile?
Zum Beispiel, wenn ich eine einfache Ansicht, die so aussieht:
<UserControl x:Class="MyProject.Views.CarView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid>
<ListBox ItemsSource="{Binding Parts}" />
</Grid>
</UserControl>
Die gebunden ist an das CarViewModel
:
public class CarViewModel : MultiPresenter
{
public BindableCollection<IPartViewModel> Parts { get; }
}
Und die Parts
Sammlung enthält verschiedene Objekte, die Umsetzung IPresenter
und haben entsprechende Ansichten, z.B. WheelViewModel
und WheelView
, und EngineViewModel
und EngineView
.
Ich möchte Caliburn zu lösen die Ansichten für mich mit dem Sicht-Strategie.Ist das möglich?Was muss ich tun, um richtig die Hierarchie von Moderatoren in diesem Fall?
Lösung
Sie nicht haben zu ändern presenter Hierarchie für diese.Ich nur empfehlen, Sie zu prüfen, mit der MultiPresenter.Presenters
Grundstück zu sammeln untergeordnete Ansichtsmodelle und der MultiPresenter.Open
und MultiPresenter.Shutdown
Methoden wenn Sie benötigen, um durchzusetzen, Kind ViewModels lifecycle.
Für die Bindung Problem, definieren Sie die Vorlage für die ListBox-Elemente:
<ListBox ItemsSource="{Binding Parts}">
<ListBox.ItemTemplate>
<DataTemplate>
<ContentControl cal:View.Model="{Binding}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Verwendung cal:View.Model
angefügte Eigenschaft, das framework kümmert sich um die Schaffung eines angemessenen Blick für jedes ViewModel, Bindung an das ViewModel und Injektion in das ContentControl.
Sie sollten auch sicherstellen, dass Ihr namespace und Klasse der Benennung der Ansichten und ViewModels folgt die Caliburn Standard-Konvention wenn Sie möchten, dass Ihre Ansichten richtig abgeleitet Rahmen.Sonst, Sie haben zu schreiben, eine benutzerdefinierte IViewStrategy (es ist nicht schwer, obwohl).
Edit:Feste Bindung Ausdruck in cal:View.Modell Eigentum