2017-06-02 1 views
0

ich mein Viewmodel meiner Ansicht mit den MEF-Containern wie unter injizierenden:Injizieren Viewmodel mit MEF zu sehen - von der Quelle Bindung nicht funktioniert - WPF

[ImportingConstructor] 
    public MainView(IRepository repository, MainViewModel viewModel) 
    { 
     InitializeComponent(); 
     mMainViewModel = viewModel; 
     DataContext = viewModel; 
     viewModel.PropertyChanged += OnViewModelPropertyChanged; 
    } 

Alles funktioniert gut. Ich habe das Attribut export sowohl für das View- als auch für das Viewmodel.

Das Problem ist, dass, wenn ein Wert \ Eigenschaft auf dem ViewModel von einer Methode aktualisiert wird, spiegelt es nicht auf der Benutzeroberfläche. Ich habe sogar versucht, den Modus auf Zwei-Wege zu stellen - immer noch nicht funktioniert. Ich habe OnPropertyChanged für alle Property Setter aufgerufen, aber nicht funktioniert. Wie auch immer, in dem Code hinter der Ansicht, wenn ich dem Viewmodel eine propertychanged-Ereignismethode anhefte, erhalte ich die Ereignisbenachrichtigungen und das ist die einzige Möglichkeit, die Ansicht mit ihren zu aktualisieren, aber das sollte nicht notwendig sein. Ich weiß nur nicht, warum meine Ansicht nicht auf propertychange Benachrichtigungen direkt auf die gebundenen Elemente reagiert.

Irgendeine Idee, was ich falsch machen könnte? Vielen Dank.

+0

Warum möchten Sie etwas in die Ansicht von Contructor injizieren? Dafür gibt es keinen stichhaltigen Grund im Umgang mit MVVM. Ihr Basiskonzept ist falsch –

+0

Können Sie bitte erklären, was Sie mit Basis-Konzept meinen, ist falsch? Ich weiß, dass ich entweder Konstruktorinjektion oder Eigenschaftsinjektion machen kann. Im Fall der Ansichten habe ich die Konstruktorinjektion gewählt, damit ich den DataContext einstellen kann. Was ist los mit dem Ansatz? Vielen Dank. –

+0

Werfen Sie einen Blick auf MVVMlight, wie sie das MainViewModel an die MainView binden (Es erfolgt innerhalb von XAML). Und aus welchem ​​Grund wird das Repository in View geladen? –

Antwort

0

Das Problem gefunden. Es stellte sich heraus, dass ich in meiner abstrakten ViewModelBase-Klasse die Funktionen für notifypropertychanged hatte ... Aber ich hatte nicht die INotifyPropertyChanged für den Klassennamen, obwohl ich die Methode..dupid Fehler implementiert. Muss es verpasst haben. Bringt noch eine Frage auf: Warum müssen wir die Schnittstellendefinition in der Klasse haben, damit sie funktioniert? Nun, jetzt ist alles gut. funktioniert jetzt gut.

+0

Die WPF-Bindung sieht nicht aus, wenn die Klasse ein Ereignis PropertyChanged hat, es fragt nur ab, ob die Klasse INotifyPropertyChanged implementiert –

Verwandte Themen