WPF MVVM Cum de a ridica modificări de text pe faceți Clic pe Butonul

0

Problema

Am de lucru pe un proiect de WPF cu MVVM si am intampinat o problema nu iau ultima schimbare text atunci când am faceți clic pe butonul salvare.

Componentele mele sunt de configurare de genul asta:

  1. O bară de instrumente vedere cu instrumente VM, care are butonul save. buton faceți clic pe eveniment este legat de un Icommand.
  2. Un formular cu un grup de câmpuri de text, legat de un sepreate NEG.
  3. bara de instrumente view și formularul de vedere sunt în fișiere separate.
  4. toate VMs moștenește de la BindableBase (partea de Prisma.MvvM pachet)

Pe clic pe butonul, voi lua valori de la forma VM și salvați-le... simplu si stragight înainte. Totul este bine, cu excepția faptului că la editare ultimul câmp, apăsați butonul salvare pentru a nu declanșa pierde concentrarea eveniment. Prin urmare, proprietatea Set eveniment nu este declanșat. Va trebui să faceți clic pe departe de câmpurile după editare, apoi faceți clic pe butonul. Aici e codul meu:

 public class ViewModel: BindableBase
{
    private string _someText;

    public string SomeText
    {
        get { return _someText; }
        set { SetProperty(ref _someText, value); }
    }
}

în opinia XAML:

  <TextBox Text="{Binding SomeText}"/>

în bara de instrumente XAML:

<Button Command="{Binding SaveCommand}" ToolTip="Save">
</Button>

ViewModel pentru bara de instrumente:

 public class ToolbarViewModel : BindableBase
{
    private ICommand _saveCommand;
    public ICommand SaveCommand
    {
        get
        {
            return _saveCommand ?? (_saveCommand = new BaseCommandHandler(() => { 
                //Save code
            }, () => true));
        }
    }
}

codul pentru BaseCommandHandler:

 public class BaseCommandHandler : ICommand
{
    private Action _action;
    private Func<bool> _canExecute;

    /// <summary>
    /// Creates instance of the command handler
    /// </summary>
    /// <param name="action">Action to be executed by the command</param>
    /// <param name="canExecute">A bolean property to containing current permissions to execute the command</param>
    public BaseCommandHandler(Action action, Func<bool> canExecute)
    {
        _action = action;
        _canExecute = canExecute;
    }

    /// <summary>
    /// Wires CanExecuteChanged event 
    /// </summary>
    public event EventHandler CanExecuteChanged
    {
        add { CommandManager.RequerySuggested += value; }
        remove { CommandManager.RequerySuggested -= value; }
    }

    /// <summary>
    /// Forcess checking if execute is allowed
    /// </summary>
    /// <param name="parameter"></param>
    /// <returns></returns>
    public bool CanExecute(object parameter)
    {
        return _canExecute.Invoke();
    }

    public void Execute(object parameter)
    {
        _action();
    }
}

Stie cineva un mod curat de a face sigur că accentul este pierdut sau o modalitate de a declanșa eveniment set de bindable properties

2-way-object-databinding c# mvvm prism
2021-11-23 08:41:19
1

Cel mai bun răspuns

1

Ar trebui să utilizați UpdateSourceTrigger=PropertyChanged

<TextBox Text="{Binding TextValue, UpdateSourceTrigger=PropertyChanged}"/>

2021-11-23 08:59:41

În fapt, făcând clic pe un buton înseamnă pierdere de focalizare pentru caseta de text, așa că ar trebui să fi actualizate.
Haukinger

@Haukinger hmm...
dmitriy

@Haukinger, m-am gândit că a fost cazul, dar, din păcate, nu, nu are declanșa pierde concentrarea
Just another Dev

@Haukinger, mă întreb dacă este pentru bara de instrumente și sub formă de text sunt separate controale? care nu are sens....
Just another Dev

@JustanotherDev ar putea fi cu siguranta o sursa dacă bara de instrumente și controalele formularului individual modele de vedere.
Jeffery

În alte limbi

Această pagină este în alte limbi

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................