Domanda

Ho un app seguente MVVM regime.Dove ho più Vista e viewmodel.Sul mio mainPage ho un textblock che vorrei aggiornare con le informazioni da elementi scelti.

All'avvio dell'app posso inserire un valore da mainviewmodel per testare il collegamento in modo che tutto lavori qui.Dove il codice è il seguente:

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

Codice mainviewmodel

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

            NotifyPropertyChanged("colorOfElement");

        }
    }

......

colorOfElement = "Test";

Questo viene visualizzato correttamente.Quando un utente interagisce con un elemento che viene generato un evento, all'interno del nuovo viewmodel, qui ho un riferimento per il mainviewmodel così posso aggiornare facilmente la stringa 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;
    }

quando questa funzione viene eseguita sto mandare in mainviewmodel e NotifyPropertyChanged è sparato.Ma l'Applicazione.Pagina che mostra la vista non riesco a vedere alcun aggiornamento della variabile, ma nel codice variabile modifiche.Qualche idea per questo problema vincolante?

Risposta Come avevo testato il datacontext e tutto funziona, il problema era nella mia classe pubblica.

     public class MainViewModel : ViewModelBase

Qui dovrebbe includere l'interfaccia INotifyPropertyChanged per abilitare la funzione.Quindi la soluzione è semplice per aggiungere questo e ottenere:

     public class MainViewModel : ViewModelBase, INotifyPropertyChanged

Poi vi sono buone per andare :)

È stato utile?

Soluzione

Assicurare che:

  • DataContext è impostato a destra istanza di MainViewModel
  • il MainViewModel implementa l'Interfaccia INotifyPropertyChanged
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top