Jaký je nejlepší přístup k vytvoření Visual Studio-jako Začátek Okna pomocí ReactiveUI?

0

Otázka

Chci, aby se Start / Welcome / Řešení, výběr okna, které má podobné funkce v VS19 / VS22, ale nejsem si jistý, jak to udělat přesně.

Pro další souvislosti, můj současný StartWindowView má "Vytvořit Nový Projekt" tlačítko, které by měly nahradit celý obsah okna s 2-stránku průvodce vytvořením projektu.

Stránka 1 by měla být "Základní Možnosti", kde v dolní části jsou "Zrušit" a tlačítka "Next" ("Zrušit" se vrací do původní StartView a "Další" jde do Page2View).

Page 2 by měla být "Extra Options", kde v dolní části jsou "Zpět" a "Dokončit" tlačítko ("Zpět" vrací do Page1View a "Dokončit" se vrací do StartView, vrací ProjectModel)

Z mého chápání, to jsou ViewModels budu muset vypořádat s:

StartWindowViewModel // Main window host (possible router)
    StartViewModel // Main project selection view
    ProjectCreationViewModel // Possible router for Page1 & Page2
        ProjectCreationPage1ViewModel // Basic options
        ProjectCreationPage2ViewModel // Extra options

Můj nápad byl použít Směrování, ale nevím, jestli je to správný přístup, protože nejsem si jistý, jestli dat mezi Stránka1 a Page2 bude zachována, když jde sem a tam. Také, směrování příklady, které jsem viděl pro ReactiveUI mají pevné "Zpět" a "Další" tlačítka na spodní části, a proto to je pro mě myslím, že to nemusí být řešení pro můj problém, protože stisknutí tlačítka "Vytvořit Nový Projekt" tlačítko nahradí StartViewModel s ProjectCreationViewModel, takže ruční navigační nemožné.

Jsem mohl být úplně špatně. Jsem opravdu jisti, o tom, jak přistupovat k tomuto problému.

EDIT: to je To, jak VS22 start okno vypadá takto: enter image description here a to je to, co se stane, když stisknete tlačítko označené červeně: enter image description here Jak můžete vidět, celé okno změní aktuální Zobrazení.

c# mvvm reactiveui
2021-11-22 16:31:11
1

Nejlepší odpověď

1

To není příliš obtížné, jen mějte pozorovatelné kolekce zobrazení modelu zásobníku, a vždy zobrazí poslední (nebo první, je to jednodušší, s WPF bindings). Všimněte si, že já budu s odkazem na to jako zásobník, ale není tam žádný ObservableStack<> již postavený pro vás. Buď použít ObservableCollection<> nebo vytvořit svůj vlastní pozorovatelné zásobníku.

Poté, jak budete potřebovat pro navigaci "do" průvodce (nový projekt, klonování repozitáře, atd), můžete jednoduše push to dítě prohlédnout model do zásobníku. Když potřebujete navigovat "z" průvodce (tj, na Zrušit), pop naposledy prohlédnout model ze zásobníku.

Posledním krokem je spojit vaše názory pro prohlížení modelů (pomocí DataTemplate v high-level zdrojů bloku, a to buď globální, nebo lokální ve vaší úvodní stránku) a pak svázat zobrazení modelu zásobníku je horní, aby se vaše hlavní okno (shell, který má ContentControl vázán na vrchol zásobníku).

2021-11-22 16:51:43

Zásobník nápad zní velmi rozumně a zdá se, stejný přístup VS je pomocí, teď, že jsem se na to podívat. Pořád nevím, kam bych měl dát na Stack, když a jak se k tomu mám postavit? Řekněme, Horní položka v zásobníku je Page2ViewModel, a když jsem stiskněte tlačítko "Zpět", jak je stack měl vědět, že to by mělo Pop tuhle stránku? Měl bych použít nějaký Vzkaz Autobus?
Nickelony

Dítě VM bude získat handle na hlavní okno, VM v konstruktoru, a přes to, to může volat příkaz pop sám ze zásobníku, když je potřeba. To je to, co jste se váží na své tlačítko "Zpět".
Blindy

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................