Die kurze Antwort ist sofort und synchron.
Die lange Geschichte
ich nicht UpdateSourceTrigger
mit (a) Synchronität der Bindung mischen würde. Der erste definiert, wie oft die Quelleneigenschaft z.B. wenn ein Steuerelement den Fokus verliert oder wenn die UpdateSource
-Methode aufgerufen wird ...
Andererseits definiert die Synchronität einer gegebenen Bindung, ob get/set-Operationen einer Quelleigenschaft synchron oder asynchron ausgeführt werden. In der Praxis sehen Sie nur einen Unterschied, wenn das Lesen einer Quelleigenschaft lange dauern kann. In diesem Fall wird die Benutzeroberfläche standardmäßig gesperrt.
Sie können die Synchronität der Bindung über die Eigenschaft Binding.IsAsync steuern. Hier ist ein Beispiel, das einen Unterschied zeigt. Beginnen wir mit XAML:
<TextBox Text="{Binding Text, Mode=TwoWay}"/>
<Button Click="Button_Click">Update</Button>
Und hier ist ein Code dahinter. MainWindow
hat Text
Eigenschaft, die eine Quelle für eine Bindung ist. Wenn auf eine Schaltfläche geklickt wird, wird sie aktualisiert. Wenn Sie die Eigenschaft Text
untersuchen, werden Sie sehen, dass es 10 Sekunden dauert, um den Wert zu erhalten.
public partial class MainWindow : Window, INotifyPropertyChanged
{
private string _text;
public string Text
{
get
{
System.Threading.Thread.Sleep(10000);
return _text;
}
set
{
_text = value;
OnPropertyChanged(nameof(Text));
}
}
public MainWindow()
{
DataContext = this;
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
Text = DateTime.Now.ToString();
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
Wenn Sie diesen Code ausführen, erhalten Sie 2 Dinge beachten:
- Die Anwendung langsam beginnt.
- Wenn Sie auf eine Schaltfläche klicken, hängt die Anwendung.
Jetzt ändern auf diese Weise verbindlich:
<TextBox Text="{Binding Text,Mode=TwoWay, IsAsync=true}"/>
Führen Sie die Anwendung erneut:
- Die Anwendung startet sofort.
- Wenn Sie auf eine Schaltfläche klicken, hängt die Anwendung nicht.
Die ähnliche excerise kann mit einem Setzer von Eigenschaft durchgeführt werden, d. H.Bewegen Sie einfach System.Threading.Thread.Sleep(10000);
zum Setter.