<!-- View -->
<TextBox Text="{Binding str, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
// View Model
private string _str;
public string str
{
get { return _str; }
set
{
if (!value.Contains("a"))
_str = value;
OnPropertyChanged(nameof(str));
}
}
Quando si digita nel controllo TextBox voglio che buttare fuori tutti i caratteri non validi (in questo caso di esempio la lettera 'a', ma potrebbe davvero essere per nulla). Per esempio:UWP TextBox non rispettare TwoWay vincolante quando si digita
- utente digita 'fds' seguito da una 'a'
- str rileva una, in modo da non impostata _str a 'fdsa', tenerlo a 'FDS' ma genera l'evento in ogni caso per indicare alla vista di buttare fuori la 'a'.
- In WPF, questo risulta nella casella di testo contenente 'fds'. In UWP, questo risulta nella casella di testo che contiene erroneamente 'fdsa' ancora.
Sembra che in UWP quando un controllo è attivo, non rispetterà il binding TwoWay.
Posso creare un pulsante con un evento Click che, se premuto, aggiorna correttamente il mio TextBox.
private void btn_Click(object sender, RoutedEventArgs e)
{
OnPropertyChanged(nameof(str));
}
Abbiamo molti ViewModels che abbiamo bisogno di usare sia in WPF e viste UWP, e noi abbiamo questo comportamento richiesto in tutto il luogo. Qual è una buona soluzione a questo problema?
* EDIT *
tornati al problema dopo il fine settimana e sembra essersi risolto. Non ho idea del perché. Sto chiudendo la domanda per ora.
Penso che sia un tipo di problema relativo a UWP, vedo un sacco di persone che si lamentano del bind a doppio senso su uwp, ho fatto un test qui su un'applicazione desktop e funziona perfettamente. Forse un convertitore può aiutarti. –
Trovo che funzioni sempre bene finché imposto in modo esplicito UpdateSourceTrigger = PropertyChanged – Saxar
Hai mai capito perché è successo? Sto avendo questo problema. – user3007447