2017-09-04 2 views
-4

nicht rendern kann Ich denke, ich vermisse hier etwas Einfaches.ContentControl innerhalb des Fensters

Das ist, was ich will: Ich möchte eine MainWindowViewModel-Instanz mwVM erstellen. Ich möchte diese Instanz dem MainWindow zuordnen.

Ich möchte die View-Instanz dem Member viewModel1 von MwVM zuordnen. Daher möchte ich tatsächlich eine Hierarchie von Instanzen von ViewModel in der Ansicht übergeben. Bis jetzt kann ich keine Sicht sehen.

Ich versuche, ein benutzerdefiniertes ContentControl in einem WPF-Fenster zu rendern. Wenn ich MainWindow.xaml als Einstiegspunkt der Anwendung verwende, sehe ich nichts. Aber wenn ich view1.xaml als Einstiegspunkt (in App.xaml) verwende, kann ich den Text "Hello" sehen. Was fehlt mir hier?

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

Unklar, was Sie fragen. Der Code, den Sie oben zeigen, legt den Datenkontext für Ihr Fenster jedoch nur dann fest, wenn der Code im Designer ausgeführt wird. Wenn Sie fragen, warum Sie das Benutzersteuerelement zur Laufzeit nicht sehen, naja ... das wäre der Grund. Sie müssen den Datenkontext dann auch einstellen. Oft brauchen Sie nicht einmal "DesignInstance" ... nur, wenn Sie ein speziell gefülltes Modellobjekt für die Entwurfszeit benötigen. In vielen Fällen funktioniert das normale Ansichtsmodell während der Entwurfszeit einwandfrei. in anderen Fällen ist dies kein Hinderungsgrund für die Gestaltung der Benutzeroberfläche. –

+0

Ich möchte view1 innerhalb des mainWindow rendern und dieses view1 dem Element viewModel1 zuordnen (das von der MainWindowViewModel-Instanz stammt, die diesem MainWindow zugeordnet ist). Wenn ich auf "Run" klicke, wird nichts angezeigt, das ist das Problem. – 10101010

+0

Ich habe versucht, DataContext im Hauptfenster, in der MainWindow.xaml.cs und in beiden zu platzieren. In keinem der beiden Fälle wird mein View1 angezeigt – 10101010

Antwort

1

Stellen Sie die DataContext Eigenschaft des Fensters:

<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> 

Dies setzt nur die EntwurfszeitDataContext:

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

Sie sollten auch die tatsächliche DataContext Eigenschaft setzen:

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