mvc español c# wpf silverlight mvvm devforce

c# - español - mvvm wpf



¿Cómo puedo acceder a un control en el modelo mvvm en viewmodel? (5)

Debería mover su código de creación a Ver, y ViewModel debería simplemente notificar a la vista cuando debería ser llamado.

Tengo una ventana de WPF, y en esa ventana tengo una grilla.

Uso el modelo MV-VM y quiero agregar un TextBox a la grilla dinámicamente en el código (en el modelo de vista)

¿Cómo puedo acceder a la grilla?


Si está utilizando Caliburn Micro, implemente el siguiente paso:

  1. Haga que ViewModel se herede de la interfaz IViewAware ; Vas a implementar dos métodos AttachView y GetView de esta interfaz.

  2. Defina una variable con el tipo de vista para obtener la referencia a la vista

  3. Ver detalle a continuación:

    private SomeViewClass v; public void AttachView(object view, object context = null) { v = view as BomView; if (ViewAttached != null) ViewAttached(this, new ViewAttachedEventArgs() { Context = context, View = view }); } public object GetView(object context = null) { return v; }

Más tarde, puede acceder a un elemento único en la Vista a través de v, como v.txtName = "John"; etc ...


También puede usar el DataContext (que es el ViewModel) de la Vista en el código detrás de la vista, y agregar el cuadro de texto a la grilla allí. Eso tendría más sentido.

Si le da un nombre a la grilla en su archivo XAML, podrá acceder a la grilla en el código inmediatamente.


antes de ir a ViewMode, aparece tu código detrás y atrapa el control objetivo de esa manera

No abandone ViewModel en instancias xaml de eso use el controlador de eventos

Esto le proporciona una nueva capa que le permite construir su arquitectura de la siguiente manera: MVVM => MV (C) VM


Utilice el patrón de Controlador Supervisor .

Leyendo:

La implementación de ejemplo para el marco de CaliburnMicro MVVM se muestra aquí (funcionará igual para todos los demás frameworks, o puede hacerlo a mano si está haciendo MVVM por su cuenta):

http://drc.ideablade.com/devforce-2012/bin/view/Documentation/cocktail-tutorial-talk-to-view

Ejemplo:

1) Definir IView interfaz en el que ViewModel ( VM ) hablará con View con los métodos requeridos

public interface IView { void AddTextBoxToGrid(); }

2) Heredar código detrás de View desde su IView e implementar el método IView.AddTextboxToGrid()

public partial class View : IView { public void AddTextBoxToGrid() { // implement here your custom view logic using standard code behind; } }

3) Agregue la propiedad de tipo IView a su VM

public class ViewModel { public IView View { get; set; } }

4) Establecer la propiedad View en VM a instancia de View como IView por ejemplo, en código detrás de DataContext.View = this como IView; o en Caliburn puede usar IScreen.OnViewAttached override method)

public partial class View : IView { public View() { // access you VM by strategy of your framework or choice - this example is when you store your VM in View''s DataContext (DataContext as ViewModel).View = this as IView; } public void AddTextBoxToGrid() { // implement here your custom view logic using standard code behind; } }

5) En tu VM llama a IView.AddTextboxToGrid()

public class ViewModel { public IView View { get; set; } public void AddTextBoxToGrid() { if (View == null) return; View.AddTextBoxToGrid() } }