Nachdem ich einige der Lösungen hier für einige Zeit verwendet habe, habe ich meine eigene entwickelt, die gut für mein MVVM-Setup funktioniert. Beachten Sie, dass es nicht so dynamisch wie einige der anderen in einem Sinne von immer noch erlaubt Benutzern, fehlerhafte Zeichen eingeben, aber es blockiert sie von der Schaltfläche drücken und damit etwas tun. Dies passt gut zu meinem Thema der grauen aus Schaltflächen, wenn Aktionen nicht ausgeführt werden können.
Ich habe eine TextBox
dass der Benutzer die Anzahl der zu druckenden Dokumentseiten eingeben muss:
<TextBox Text="{Binding NumberPagesToPrint, UpdateSourceTrigger=PropertyChanged}"/>
...mit dieser verbindlichen Eigenschaft:
private string _numberPagesToPrint;
public string NumberPagesToPrint
{
get { return _numberPagesToPrint; }
set
{
if (_numberPagesToPrint == value)
{
return;
}
_numberPagesToPrint = value;
OnPropertyChanged("NumberPagesToPrint");
}
}
Ich habe auch eine Schaltfläche:
<Button Template="{DynamicResource CustomButton_Flat}" Content="Set"
Command="{Binding SetNumberPagesCommand}"/>
...mit dieser Befehlsbindung:
private RelayCommand _setNumberPagesCommand;
public ICommand SetNumberPagesCommand
{
get
{
if (_setNumberPagesCommand == null)
{
int num;
_setNumberPagesCommand = new RelayCommand(param => SetNumberOfPages(),
() => Int32.TryParse(NumberPagesToPrint, out num));
}
return _setNumberPagesCommand;
}
}
Und dann ist da noch die Methode der SetNumberOfPages()
aber das ist für dieses Thema unerheblich. In meinem Fall funktioniert es gut, weil ich keinen Code in die Code-Behind-Datei der View einfügen muss und es mir erlaubt, das Verhalten mit der Command
Eigentum.