Caliburn Micro Guard Methoden nicht Bewertung auf Eigenschaft ändern
Spiele ich schon mit dem Caliburn Micro-MVVM-framework und habe einige Probleme mit guard-Methoden.
Ich habe ein view-model:
public class MyViewModel : PropertyChangedBase, IMyViewModel
Einer Immobilie:
public DateTime? Date
{
get{return this.date; }
set
{
this.date = value;
this.NotifyOfPropertyChange(() => Date);
}
}
Außerdem habe ich eine Methode aus meiner Sicht das Modell mit einer Wache Methode
public void Calculate()
{
//..some code..
}
public bool CanCalculate()
{
return this.Date.HasValue;
}
Sowie eine Schaltfläche in meiner Ansicht:
Das problem, das ich habe ist, dass die CanCalculate Methode wird beim laden, aber wenn ich geben Sie Werte in die Textfelder ein, es nicht bewerten die CanCalculate Methode. Ich bin die Entlassung der property-changed-Ereignis auf die Einstellung der Datenbindung anzeigen-Modell-Eigenschaften also, was könnte das problem sein?
- Könnte man den code für die anzeigen und auch, wo Sie berufen sich auf die NotifyOfPropertyChanged Methode im view-model?
- ok, habe ich aktualisiert
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ok ich habe es herausgefunden. Ich wusste gar nicht, dass Sie haben, um das Feuer der Wache Methode Benachrichtigung, dachte der Rahmen blieb, aber es macht Sinn.
Also ich mein Eigentum setter zu:
verändert und meine
CanCalculate
Methode, einer Eigenschaft:Und alles funktioniert jetzt 🙂
Wenn Sie nicht brauchen, die CanExecute-werden-Methode, da Sie nicht die Parameter verwenden. Dann schreiben Sie es als Eigentum mit standard-Benachrichtigung und nur getter. Und rufen die PropertyChanged, wenn Sie davon ausgehen Ergebnis der getter geändert.
Ich gehe davon aus, dass diese werden als über eine
Command
(einige code um das, was ist, rufen diese Methoden helfen würde).Wenn der Fall Sie haben ist, dass Sie wollen, dass die Befehle zu revevaluate basierend auf einige Eingaben machen zu müssen
CommandManager.InvalidateRequerySuggested()
so die BefehleCanExecute
s wird aufgerufen. Da der Befehl gebunden ist, auf die Schaltfläche und nicht die textbox wird nicht aktualisiert. In Ihrer Eigenschaft setter (das, gebunden an die textbox) Sie haben zu sagen, das framework requery die Befehle. Diese wiederum rufen IhreCanCalculate
Methode.Wenn das Berechnen und CanCalculate Methoden sind nicht im Zusammenhang mit einem Befehl dann die oben nicht helfen.
Commands
an alle - es hatActions
/ActionMessages
.