簡體   English   中英

從另一個視圖更改為視圖

[英]Changing to view from another view

我目前正在學習 C# 和 WPF。 我已經開始編寫簡單的應用程序,我有 1 個 model class(書籍)、2 個 model 視圖(BookListModelView、AddControlNewBookListView)和 AddNewBookView 2 個視圖。

我的問題是當我當前的視圖是 BookListView 時如何更改為 AddNewBookView?

主窗口.xaml:

<ContentControl Grid.Row="1" Grid.Column="1" Content="{Binding}"/>

MainWindow.xaml.cs:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        BookListModelView bookListMV = new BookListModelView();
        this.DataContext = bookListMV;
    }
}

BookListView.xaml.cs

public partial class BookListView : UserControl
{
    public BookListView()
    {
        InitializeComponent();
    }

    private void NewBookBtn_Click(object sender, RoutedEventArgs e)
    {
        this.DataContext = new AddNewBookViewModel();
    }
}

謝謝您的回答!

實現這一點的常用方法是使用 DataTemplates。 基本上,您的主視圖 model 中有一個屬性,其中包含子頁面的視圖模型:

public object PageViewModel {get; set;} // <--- needs property change notification

我在這里使用了object作為類型,而在實踐中,您通常有一些基本的 class 用於您的頁面。

在您的視圖中,您創建了一個 ContentControl 並將其綁定到此屬性:

<ContentControl Content="{Binding PageViewModel}" />

最后,您需要指定某種映射,為每個視圖 model 類型指定要顯示的視圖。 這就是數據模板的用武之地:

<DataTemplate DataType="{x:Type local:ChildViewModel1}">
    <local:ChildViewControl1 />
</DataTemplate>

<DataTemplate DataType="{x:Type local:ChildViewModel2}">
    <local:ChildViewControl2 />
</DataTemplate>

實現此目的的另一種方法是通過數據觸發器。 這些被放入父母的風格並檢查每個可能的值,明確設置內容:

<DataTrigger Binding="{Binding PageViewModelProperty}" Value="SomeChildViewModel1Value">
    <Setter Property="Template" Value="{StaticResource MyPageTemplate1}" />
</DataTrigger>

<DataTrigger Binding="{Binding PageViewModelProperty}" Value="SomeChildViewModel2Value">
    <Setter Property="Template" Value="{StaticResource MyPageTemplate2}" />
</DataTrigger>

... 等等。 這更適合您可能沒有針對每種頁面類型的單獨 class 類型的情況,例如在頁面包含動態生成的內容的情況下。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM