Nel seguente semplice applicazione WPF un TextBox
è impostato per aggiornare una proprietà quando il focus si perde da quella di controllo, in questo modoTextBox LostFocus non viene generato quando si fa clic su alcuni altri controlli
<DockPanel>
<ToolBar DockPanel.Dock="Top">
<Button>Test</Button>
</ToolBar>
<TextBox Text="{Binding MyString}" />
</DockPanel>
public MainWindow()
{
InitializeComponent();
DataContext = this;
}
public string MyString
{
get { return _myString; }
set { _myString = value; }
}
Tuttavia quando corro questa applicazione, inserire del testo nella casella di testo e quindi fare clic sul pulsante "Test" il mio punto di interruzione sulla proprietà MyString
è non sollevato, inoltre non viene generato alcun gestore di eventi per l'evento FocusLost
. Questi eventi vengono sollevati solo quando la concentrazione viene persa dal controllo tramite altri mezzi (ad esempio, la finestra è chiusa).
Questo è causa di problemi per noi come in realtà il pulsante "Test" contiene la logica che si basa sulla proprietà MyString
in fase di aggiornamento.
Come è possibile verificare che l'evento FocusLost
sia stato generato correttamente e che il binding sia aggiornato mentre faccio clic sul pulsante "Test"? Sembra che il problema sia in qualche modo causato dall'uso dello ToolBar
, poiché la sostituzione dello ToolBar
con un pulsante standard non comporta questo comportamento.