c# wpf mvvm

c# - Modelo Mvvm ViewModel



wpf (2)

El pensamiento inicial para MVVM fue que la Vista no debería conocer (no depender) del Modelo.

En la práctica, esto significaba volver a implementar todas las propiedades del Modelo en ViewModel (ver el cuadro amarillo claro en la imagen a continuación), mucho trabajo. Y extra doloroso cuando su Modelo puede implementar fácilmente INPC, por ejemplo, cuando se genera a partir de un esquema de base de datos. Entity Framework en el modo de base de datos primero le permite inyectar el código INPC a través de las plantillas T4.

El consenso se convirtió rápidamente en que está bien reenviar una propiedad ViewModel.Model y vincularla, al igual que su propiedad DM . Ver el cuadro azul claro en la imagen.

El problema se visualiza bien en esta imagen, tenga en cuenta la gran cantidad de flechas en la esquina superior derecha. Representan las diversas soluciones para la vinculación de datos y puede utilizar cualquier combinación de ellas.

¿Puede llamarse modelo MVVM o no? Porque View interactúa con DataModel a través de ViewModelData. ¿View debería interactuar solo con ViewModelData? Leí en alguna parte que el modelo MVVM correcto debería implementar INotify en ViewModel, no en Model. ¿Es correcto?

namespace WpfApplication135 { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); DataContext = new ViewModelData(); } } public class ViewModelData { public DataModel DM { get; set; } public ViewModelData() { DM = new DataModel(); } } public class DataModel : INotifyPropertyChanged { public int label; public int Label { get { return label; } set { label = value; RaisePropertyChanged("Label"); } } public DataModel() { Action Update = new Action(Run); IAsyncResult result = Update.BeginInvoke(null, null); } public event PropertyChangedEventHandler PropertyChanged; private void RaisePropertyChanged(string info) { if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(info)); } public void Run() { int i=0; while(true) { System.Threading.Thread.Sleep(2000); Label = ++i; } } } }

xaml

<Grid> <Label Content="{Binding DM.Label}" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top"/> </Grid>


Un punto de MVVM es que su vista no debe conocer su modelo de datos y viceversa. Por eso hay un ViewModel. En este momento, su ViewModel es código desperdiciado. No hace nada

Es posible que desee leer un poco más sobre MVVM, porque explicarlo aquí es demasiado amplio para el formato de preguntas y respuestas.