wake-up-neo.com

Wie setze ich ein ViewModel in einem Fenster in XAML mithilfe der DataContext-Eigenschaft?

Die Frage sagt so ziemlich alles.

Ich habe ein Fenster und habe versucht, den DataContext mit dem vollen Namespace auf das ViewModel zu setzen, aber ich scheine etwas falsch zu machen.

<Window x:Class="BuildAssistantUI.BuildAssistantWindow"
    xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml"
    DataContext="BuildAssistantUI.ViewModels.MainViewModel">
87
Nicholas

Zusätzlich zu der Lösung, die andere Personen bereitgestellt haben (die gut und korrekt sind), gibt es eine Möglichkeit, das ViewModel in XAML anzugeben und dennoch das spezifische ViewModel von der View zu trennen. Das Trennen ist nützlich, wenn Sie einzelne Testfälle schreiben möchten.

In App.xaml:

<Application
    x:Class="BuildAssistantUI.App"
    xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:BuildAssistantUI.ViewModels"
    StartupUri="MainWindow.xaml"
    >
    <Application.Resources>
        <local:MainViewModel x:Key="MainViewModel" />
    </Application.Resources>
</Application>

In MainWindow.xaml:

<Window x:Class="BuildAssistantUI.MainWindow"
    xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml"
    DataContext="{StaticResource MainViewModel}"
    />
106

Versuchen Sie dies stattdessen.

<Window x:Class="BuildAssistantUI.BuildAssistantWindow"
        xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml"
        xmlns:VM="clr-namespace:BuildAssistantUI.ViewModels">
    <Window.DataContext>
        <VM:MainViewModel />
    </Window.DataContext>
</Window>
133
Josh

Sie müssen das MainViewModel instanziieren und als Datenkontext festlegen. In Ihrer Anweisung wird es nur als Zeichenfolgenwert betrachtet.

     <Window x:Class="BuildAssistantUI.BuildAssistantWindow"
        xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:BuildAssistantUI.ViewModels">
      <Window.DataContext>
        <local:MainViewModel/>
      </Window.DataContext>
10
Jobi Joy

Vielleicht möchten Sie versuchen Catel . Hiermit können Sie eine DataWindow-Klasse (anstelle von Window) definieren. Diese Klasse erstellt automatisch das Ansichtsmodell für Sie. Auf diese Weise können Sie die Deklaration des ViewModel wie in Ihrem ursprünglichen Beitrag verwenden, und das Ansichtsmodell wird weiterhin erstellt und als DataContext festgelegt.

Siehe dieser Artikel für ein Beispiel.

3