Estoy utilizando el WFP con diseño MVVM para mi primer proyecto y tengo el problema de actualizar la vista después de procesar un comando del cliente para actualizar la entidad. En este momento, la vista puede hablar con el modelo de vista, pero el modelo de vista no pudo responder. ¿Alguien tiene alguna idea de cómo hacer que esto funcione? Gracias, JdangCómo actualizar la vista desde un modelo de vista en WPF usando el diseño MVVM
Respuesta
Debe hacer que ViewModel implemente INotifyPropertyChanged y desencadenar el evento PropertyChanged cuando cambien las propiedades de ViewModel. Suponiendo que la interfaz de usuario está vinculada a las propiedades de ViewModel, esto debería funcionar.
En una aplicación MVVM típica, utiliza enlaces para conectar la vista al ViewModel. Los enlaces se actualizan automáticamente cuando ViewModel provoca el evento PropertyChanged
, definido por la interfaz INotifyPropertyChanged
. Por lo tanto, debe implementar esa interfaz en ViewModel y generar el evento PropertyChanged
cuando se modifique el valor de una propiedad, y la vista reflejará el cambio automáticamente.
Sí, implemento INotifyPropertyChanged y desencadenar el evento PropertyChanged pero nada cambia en la vista. ¿Tengo que hacer algo especial a la vista? Actualmente, aquí está lo que tengo – AustinTX
Sí, implemento INotifyPropertyChanged y desencadenar el evento PropertyChanged pero nada cambia en la vista. ¿Tengo que hacer algo especial a la vista? Actualmente, aquí está lo que tengo para mi xaml Text = "{Vinculando usuario.Nombre de usuario, Modo = TwoWay, UpdateSourceTrigger = PropertyChanged} ". ¿Tiene algún ejemplo para que eche un vistazo? – AustinTX
Debería funcionar con lo que tiene ... ¿Podría editar su pregunta para incluir más código? –
Si usted es nuevo en el patrón MVVM, recomiendo los siguientes como excelentes recursos de MSDN que cubren tanto el patrón y la forma de ponerla en práctica en las aplicaciones de WPF y Silverlight:
sobre la base de lo que ha dicho, parece que es posible que desee revisar data binding, y cómo se puede aprovechar la INotifyPropertyChanged, INotifyCollectionChanged, una d ICollectionView interfaces para permitir la comunicación bidireccional entre sus vistas y modelos de visualización.
El enlace de datos de Silverlight y WPF admite múltiples modos de enlace de datos. Con el enlace de datos unidireccional, los controles de UI pueden vincularse a un modelo de vista para que reflejen el valor de los datos subyacentes cuando se representa la visualización. El enlace de datos bidireccional también actualizará automáticamente los datos subyacentes cuando el usuario lo modifique en la interfaz de usuario. Para garantizar que la UI se mantenga actualizada cuando los datos cambian en el modelo de vista, debe implementar la interfaz de notificación de cambio adecuada.
Sí, implemento INotifyPropertyChanged y activa el evento PropertyChanged pero no cambia nada en la vista. Tengo que hacer algo especial en la vista. Actualmente esto es lo que tengo Text = "{Binding User.UserName, Mode = TwoWay, UpdateSourceTrigger = PropertyChanged}" – AustinTX
Su encuadernación parece ser correcto. ¿Ha verificado que PropertyChanged se está generando cuando la propiedad UserName se cambia configurando un punto de interrupción? Además, compruebe que el nombre textual de la propiedad que está generando para el evento coincide exactamente con el nombre de su propiedad. y vea el modelo si lo desea, eso ayudaría a solucionar el problema. – Oppositional
Además a las otras respuestas, me gustaría también sugieren tener sus ViewModels extienden DependencyObject.
Algunas personas creen que los DependencyObjects son pesados (y pueden serlo, si creas miles de instancias de ellos) y un poco complejos para los usuarios nuevos (definitivamente hay situaciones en las que esto es cierto). Sin embargo, existen otras ventajas para DependencyObjects, como el soporte automático para la notificación de cambio de propiedad y la velocidad de evaluación de enlace.
Aquí es mi fragmento de DP (guardar como DependencyProperty.snippet en C: \ Users [Su nombre aquí] \ Documentos \ Visual [2010, 2008] \ fragmentos de código \ Visual C# \ Mis fragmentos de código Estudio):
<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<CodeSnippet Format="1.0.0">
<Header>
<SnippetTypes>
<SnippetType>Expansion</SnippetType>
</SnippetTypes>
<Title>SnippetFile1</Title>
<Author>will</Author>
<Description>
</Description>
<HelpUrl>
</HelpUrl>
<Shortcut>dp</Shortcut>
</Header>
<Snippet>
<Declarations>
<Literal Editable="true">
<ID>PropertyName</ID>
<ToolTip>Property name</ToolTip>
<Default>PropertyName</Default>
<Function>
</Function>
</Literal>
<Literal Editable="false">
<ID>ClassName</ID>
<ToolTip>Class name</ToolTip>
<Default>ClassName</Default>
<Function>ClassName()</Function>
</Literal>
<Literal Editable="true">
<ID>Type</ID>
<ToolTip>Property type</ToolTip>
<Default>object</Default>
<Function>
</Function>
</Literal>
<Literal Editable="true">
<ID>DefaultValue</ID>
<ToolTip>Default value</ToolTip>
<Default>null</Default>
<Function>
</Function>
</Literal>
</Declarations>
<Code Language="csharp"><![CDATA[#region $PropertyName$
/// <summary>
/// The <see cref="DependencyProperty"/> for <see cref="$PropertyName$"/>.
/// </summary>
public static readonly DependencyProperty $PropertyName$Property =
DependencyProperty.Register(
$PropertyName$Name,
typeof($Type$),
typeof($ClassName$),
new UIPropertyMetadata($DefaultValue$));
/// <summary>
/// The name of the <see cref="$PropertyName$"/> <see cref="DependencyProperty"/>.
/// </summary>
public const string $PropertyName$Name = "$PropertyName$";
/// <summary>
/// $end$
/// </summary>
public $Type$ $PropertyName$
{
get { return ($Type$)GetValue($PropertyName$Property); }
set { SetValue($PropertyName$Property, value); }
}
#endregion ]]></Code>
</Snippet>
</CodeSnippet>
</CodeSnippets>
Estoy de acuerdo en que obtiene algunos beneficios de rendimiento usando un DependencyObject, b pero están vinculados al hilo en el que se crearon y los objetos de dependencia no son serializables. En ciertos casos, definitivamente son el camino a seguir, pero en general es más seguro (y aún relativamente efectivo) utilizar un POCO con las interfaces de notificación. – Oppositional
Para los interesados, http://msdn.microsoft.com/en-us/library/bb613546.aspx#HowDataBindingReferencesAreResolved proporciona información decente sobre las implicaciones de rendimiento de las que habla Will. – Oppositional
- 1. MVVM Modelo de acceso desde la vista
- 2. WPF MVVM modelo de vista DesignMode constructor
- 3. WPF (MVVM): ¿Cerrar una vista desde Viewmodel?
- 4. acceso MVVM vista padre modelo desde dentro de la colección
- 5. Actualizando un modelo de vista desde otro modelo de vista
- 6. WPF MVVM manera correcta para disparar eventos en vista del modelo de vista
- 7. ¿Cómo mantengo la coherencia entre el modelo y el modelo de vista en el patrón MVVM?
- 8. MVVM - Diferencia entre el modelo y el modelo de vista
- 9. Cómo manejar el subproceso de C# WPF en el modelo de vista de MVVM
- 10. Accediendo al modelo desde una vista de diseño en Grails
- 11. MVVM vista de base clase de modelo
- 12. WPF - Manejo de eventos desde el control del usuario en el modelo de vista
- 13. WPF MVVM actualizando el Modelo de Vista en un Trabajador de Fondo
- 14. Prism2/MVVM Cerrar Vista desde ViewModel
- 15. Forma correcta de acceder a un modelo de vista desde un modelo de vista existente
- 16. ¿Cómo actualizar modelos de vista anidados de MVVM cuando el modelo cambia y viceversa?
- 17. MVVM duplicar, Características del modelo en modelo de vista
- 18. Animaciones de vista dinámica usando MVVM
- 19. Silverlight MVVM modelo de enlace y vista modelo
- 20. WPF - Manejar un ApplicationCommand en el modelo de vista
- 21. ¿Cómo puedo actualizar la interfaz de usuario en MVVM WPF
- 22. ¿Cómo cerrar la ventana de diálogo desde el modelo de vista (Caliburn + WPF)?
- 23. WPF: ¿dónde poner DAL en el diseño de arquitectura de 3 niveles con MVVM?
- 24. Manejando el estado de la vista en Silverlight con MVVM
- 25. WPF Magellan modelo de vista COI
- 26. Windows Forms (WinForms) Modelo Ver modelo de modelo de vista (MVVM) a DataBind o no
- 27. Desvincular el modelo de vista de la vista en knockout
- 28. MVVM: ¿Realmente la vista necesita tener un constructor predeterminado?
- 29. MVC: Controlador de vista de modelo: ¿la vista llama al modelo?
- 30. Actualizar una vista parcial desde otra vista parcial - ASP.NET MVC2
Lo siento mucho, pero ¿Ha resuelto este problema? Me quedé en el mismo .. – curiousity