Pregunta

Tengo una aplicación que sigue el esquema MVVM.Donde tengo múltiples vistas y modelos de vista.En mi página principal tengo un bloque de texto que me gustaría actualizar con información de los elementos elegidos.

Al iniciar la aplicación, inserto un valor del modelo de vista principal para probar el enlace para que todo funcione aquí.Donde el código es el siguiente:

<TextBlock Text="{Binding colorOfElement}" Grid.Row="1"/>

Código en el modelo de vista principal

 private string _colorOfElement;
    public string colorOfElement
    { 
        get
        {
            return _colorOfElement;
        }
        set
        {
            _colorOfElement = value;

            NotifyPropertyChanged("colorOfElement");

        }
    }

......

colorOfElement = "Test";

Esto se muestra correctamente.Cuando un usuario interactúa con un elemento, se activa un evento dentro del nuevo modelo de vista. Aquí tengo una referencia al modelo de vista principal para poder actualizar fácilmente la cadena colorOfElement.

private MainViewModel mv;
......
    public void MouseDown(ManipulationStartedEventArgs obj)
    {
        FrameworkElement MovingElement = (FrameworkElement)obj.OriginalSource;

        Canvas canvas = FindParentOfType<Canvas>(MovingGear);

        obj.ManipulationContainer = canvas;
        obj.Handled = true;

        testViewModel viewModel = (testViewModel)MovingElement.DataContext;

        mv.colorOfElement = viewModel.model.Color;
    }

cuando se ejecuta esta función, me envían al modelo de vista principal y se activa NotifyPropertyChanged.Pero en la página de aplicación que muestra la vista no puedo ver ninguna actualización de la variable, pero en el código la variable cambia.¿Alguna idea para este problema vinculante?

RespuestaComo había probado el contexto de datos y todo funcionaba, el problema estaba en mi clase pública.

     public class MainViewModel : ViewModelBase

Aquí debería incluir la interfaz INotifyPropertyChanged para habilitar la función.Entonces la solución simple es agregar esto y obtener:

     public class MainViewModel : ViewModelBase, INotifyPropertyChanged

Entonces, ya puedes irte :)

¿Fue útil?

Solución

asegúrese de que:

  • DataContext se establece en la instancia correcta de la marca1model
  • El Mermodel implementa la interfaz inotifypropertychanged
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top