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:
- O bară de instrumente vedere cu instrumente VM, care are butonul save. buton faceți clic pe eveniment este legat de un Icommand.
- Un formular cu un grup de câmpuri de text, legat de un sepreate NEG.
- bara de instrumente view și formularul de vedere sunt în fișiere separate.
- 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