Ich habe mehrere Steuerelemente einschließlich einer DataGrid, die ich deaktiviert werden soll, bis ein gültiger Wert in der ersten TextBox in der Präsentation ist. Also habe ich eine boolsche Eigenschaft hinzugefügt, an die ich in der VM binde und binde sie in der XAML (unten).Datenbindung und Fokuskoordination
Die Bindung funktioniert, hat aber den Nebeneffekt, den Benutzer in der TextBox (MoneyToAllocate) "einzufangen".
Vermutlich liegt das daran, dass die TB-Bindung LostFocus ist und es keinen Platz für den Fokus gibt, um die Aktualisierungen tatsächlich auszulösen. Was ist eine gute Möglichkeit, das zu beheben?
Cheers,
Berryl
Ansichtsmodell
public bool HasMoneyToAllocate { get { return MoneyToAllocate.Amount > 0; } }
public Money MoneyToAllocate {
get { return _moneyToAllocate; }
set {
if (value.Amount < 0) return;
_moneyToAllocate = new Money(value.Amount, SelectedCurrency);
NotifyPropertyChanged(() => HasMoneyToAllocate);
}
}
Ansicht
<TextBox Text="{Binding MoneyToAllocate, Converter={StaticResource moneyConverter}}" />
<DataGrid IsEnabled="{Binding HasMoneyToAllocate}" ...
EDIT
ich hinzugefügt haben sollte, dass ich Property für Update versucht, aber es wird ein bisschen chaotisch seit dem Wert des Textfelds muss vom Konverter formatiert werden. Irgendwelche anderen Ideen?
FINAL EDIT
gewickelt ich eine andere Steuerung zu lassen, die bisher kein Register war ein Tabstopp zu stoppen sein, so dass das Textfeld hatte einen Platz zu gehen. Phil hat das Problem am besten verstanden und erhält die Antwort, obwohl der Wertebereich, den der Benutzer eingeben kann (.001 bis dezimal.MaxValue), ein Up-Down unpraktisch macht.
siehe Bearbeiten. – Berryl
Wie wäre es mit einem DecimalUpDown-Steuerelement, z. B. aus dem erweiterten WPF-Toolkit? Erzwinge dort immer eine gültige Nummer im Steuerelement und aktiviere den Rest der Benutzeroberfläche, wenn es> 0 ist. – Phil