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?

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top