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