.net wpf xaml mvvm

.net - ¿Cómo configuro un ViewModel en una ventana en XAML usando la propiedad DataContext?



wpf mvvm (4)

La pregunta prácticamente lo dice todo.

Tengo una ventana y he intentado configurar DataContext usando el espacio de nombres completo para ViewModel, pero parece que estoy haciendo algo mal.

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


Además de la solución que otras personas proporcionaron (que son buenas y correctas), hay una manera de especificar ViewModel en XAML, pero aún separar el ViewModel específico de la Vista. Separarlos es útil cuando quieres escribir casos de prueba aislados.

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

En 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}" />


Es posible que desee probar Catel . Le permite definir una clase DataWindow (en lugar de Window), y esa clase crea automáticamente el modelo de vista para usted. De esta forma, puede usar la declaración de ViewModel como lo hizo en su publicación original, y el modelo de vista se seguirá creando y configurando como DataContext.

Vea este artículo para un ejemplo.


Necesita crear una instancia del MainViewModel y configurarlo como datacontext. En su extracto, simplemente lo considera como valor de cadena.

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


Prueba esto en su lugar.

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