[英]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.