2016-07-29 18 views
1

Ich mache meinen Weg durch eine Tutorial-Serie für WPF. Derzeit bin ich bei diesem Schritt http://www.wpf-tutorial.com/data-binding/responding-to-changes/WPF TextBox UpdateSourceTrigger = LostFocus aktualisiert ständig Daten

Das Problem, das ich festgestellt habe, ist, dass ich die Textbox erwarte nur den Wert zu aktualisieren, wenn ich die TextBox verlassen. Aber selbst ob ich in oder außerhalb die TextBox den Wert bekomme, wird aktualisiert, wenn ich die Fenstergröße ändere. Das erwarte ich nicht. Wo ist mein Fehler?

Hier ist die kurze Version des Codes zu testen selbst:

<Window x:Class="MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <WrapPanel Orientation="Horizontal" Margin="0,10,0,0"> 
      <TextBlock Text="Window dimensions: "/> 
      <TextBox Text="{Binding Width, UpdateSourceTrigger=LostFocus}" Width="50" /> 
      <TextBlock Text=" x " /> 
      <TextBox Text="{Binding Height, UpdateSourceTrigger=PropertyChanged}" Width="50"/> 
     </WrapPanel> 
    </Grid> 
</Window> 
+0

Es ist in Ordnung, wie es sein muss, lesen Sie mehr über [LostFocus] (https://msdn.microsoft.com/ru-ru/library/system.windows.uielement.lostfocus (v = vs.110) .aspx). Wenn Sie also die Größe ändern, verliert die Textbox ihren Fokus, aber nicht den Tastaturfokus. – Shakra

Antwort

3

Aber selbst wenn ich in dem Text bin der Wert gets aktualisiert, wenn ich die Fenstergröße ändern.

Sie selbst sagten, dass beim Ändern der Fenstergröße der Wert aktualisiert wird. Es liegt daran, dass der Fokus aus dem Textfeld verloren geht. Sie können den Fokus programmgesteuert auf das Textfeld festlegen, wenn Sie den Fokus auch nach dem Verlust des Fokus beibehalten möchten.

Das zweite Textfeld <TextBox Text="{Binding Height, UpdateSourceTrigger=PropertyChanged}" Width="50"/> hat auch UpdateSourceTrigger=PropertyChanged. Ich hoffe, es ist nicht der Fall, den Sie erklären, da UpdateSourceTrigger=PropertyChanged die Quelle aktualisiert, wenn ein neues Zeichen in das Textfeld eingegeben wird.

+0

Natürlich muss es sein "Aber selbst wenn ich außerhalb der TextBox bin ... habe das nicht bemerkt wenn ich es posten werde ich es sofort aktualisieren –

+0

Ich bin verwirrt. In einem von 2 Fällen sollte es nicht updaten. Wenn ich den Fokus habe oder wenn nicht, wird er in beiden Fällen aktualisiert –

+1

Ich habe Ihren Code getestet, indem ich Breakpoints gesetzt habe Für das erste Textfeld: Das Set wird nur aufgerufen, wenn der Fokus aus dem Textfeld geändert wird Für das zweite Textfeld: Das Set wird aufgerufen, wenn ein neues Zeichen in das Textfeld eingegeben wird – ViVi

1

Der UpdateSourceTrigger funktioniert von der TextBox auf die Bindungssteuerungseigenschaft &. Also, ich nehme an, dass der erste TextBox die Eigenschaft Breite des Fensters nur aktualisiert, wenn der Fokus verloren ist. Die zweite TextBox aktualisiert die Eigenschaft Höhe des Fensters bei jeder Wertänderung. Wenn Sie die Größe des Fensters ändern, werden beide TextBox aktualisiert, da die Quelle das Fenster ist. UpdateSourceTrigger-Eigenschaft funktioniert unter Berücksichtigung der TextBox als Quelle.

+0

"Also, ich sup Ich stelle fest, dass die erste TextBox die Eigenschaft Breite des Fensters nur dann aktualisiert, wenn der Fokus verloren geht. "Genau das ist es, was ich erwarte, aber es macht es kontinuierlich. Deshalb kam ich, um nach dem Grund zu fragen. Es ist nicht das, was ich von ihm erwarte. –