2017-09-04 93 views
-4

我想我在這裏錯過了一些簡單的東西。無法渲染窗口內的ContentControl

這就是我想要的: 我想創建一個MainWindowViewModel實例mwVM。 我想將這個實例關聯到MainWindow。

我想將視圖實例關聯到mwVM的viewModel1成員。 因此,我真的想在視圖中傳遞來自viewModel的實例層次結構。到目前爲止,我無法看到正確的觀點。

我想呈現一個WPF窗口內的自定義ContentControl。 當我把MainWindow.xaml作爲應用程序的入口點時,我什麼都看不到。但是當我將view1.xaml作爲入口點(在App.xaml中)時,我可以看到文本「Hello」。我在這裏失蹤的是什麼?

MainWindow.xaml

<Window x:Class="MimicView.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:local="clr-namespace:MimicView" 
    mc:Ignorable="d" 
    d:DataContext="{d:DesignInstance local:MainWindowViewModel}" 
    Title="MainWindow" Height="350" Width="525"> 

<Window.Resources> 
    <DataTemplate DataType="{x:Type local:ViewModel1}"> 
     <local:View1/> 
    </DataTemplate> 
</Window.Resources> 

<Grid> 
    <ContentControl Content="{Binding viewModel1}"></ContentControl> 
</Grid> 

MainWindowViewModel.cs

namespace MimicView { 
class MainWindowViewModel { 


    public MainWindowViewModel() { 
     this.viewModel1 = new ViewModel1(); 
    } 

    public ViewModel1 viewModel1 { get; set; } 
} 
} 

View1.xaml

<UserControl x:Class="MimicView.View1" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:local="clr-namespace:MimicView" 
     mc:Ignorable="d" 
     d:DesignHeight="300" d:DesignWidth="300" 
     d:DataContext="{d:DesignInstance local:ViewModel1}"> 



<TextBox Text="Hello"/> 

的App.xaml

<Application x:Class="MimicView.App" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:local="clr-namespace:MimicView" 
     StartupUri="MainWindow.xaml"> 
<Application.Resources> 

</Application.Resources> 

+1

不清楚你在問什麼。但是,上面顯示的代碼僅在代碼在設計器中運行時纔會爲您的窗口設置數據上下文。如果您問爲什麼在運行時沒有看到用戶控件,那麼......這就是原因。您也需要設置數據上下文。通常情況下,您甚至不需要'DesignInstance' ...這僅適用於在設計時需要特殊模型對象的情況。在許多情況下,常規視圖模型在設計期間工作正常;在其他情況下,它並不是設計UI的障礙。 –

+0

我想在mainWindow中渲染view1並將view1關聯到viewModel1成員(它來自與此MainWindow關聯的MainWindowViewModel實例)。 當我碰運行時,什麼也沒有顯示,那就是問題所在。 – 10101010

+0

我試着把DataContext放在mainwindow裏面,MainWindow.xaml.cs裏面和兩者都放在裏面。在兩種情況下,我的視圖1顯示了 – 10101010

回答

1

設置窗口的DataContext屬性:

<Window x:Class="MimicView.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:local="clr-namespace:MimicView" 
    mc:Ignorable="d" 
    d:DataContext="{d:DesignInstance local:MainWindowViewModel}" 
    Title="MainWindow" Height="350" Width="525"> 

    <Window.Resources> 
     <DataTemplate DataType="{x:Type local:ViewModel1}"> 
      <local:View1/> 
     </DataTemplate> 
    </Window.Resources> 

    <Window.DataContext> 
     <local:MainWindowViewModel /> 
    </Window.DataContext> 

    <Grid> 
     <ContentControl Content="{Binding viewModel1}"></ContentControl> 
    </Grid> 
</Window> 

此只設置設計時間DataContext

d:DataContext="{d:DesignInstance local:MainWindowViewModel}" 

你還應該設置實際的DataContext屬性:

<Window.DataContext> 
    <local:MainWindowViewModel /> 
</Window.DataContext>