Eu estou trabalhando em um projeto do WPF com MVVM e me deparei com um problema de não pegar a última alteração de texto quando eu clicar no botão salvar.
Meu componentes são de configuração como esta:
- Uma barra de ferramentas modo de exibição com a barra de ferramentas VM, que tem o botão salvar. botão clique em evento está vinculado a um Icommand.
- Um modo de exibição formulário com vários campos de texto, vinculado a um sepreate VM.
- a barra de ferramentas e modo formulário são em separado arquivos.
- todas as minhas VMs herda BindableBase (parte do Prisma.MvvM pacote)
No clique do botão, eu vou levar os valores do formulário de VM e salvá-los... simples e stragight para a frente. Está tudo bem, exceto que, após a edição do último campo, clicando no botão salvar não acionar a perder o foco do evento. Portanto, o Conjunto de propriedades de evento não é disparado. Vou ter de clique de distância a partir de campos que depois de editar, em seguida, clique no botão. Aqui está o meu código:
public class ViewModel: BindableBase
{
private string _someText;
public string SomeText
{
get { return _someText; }
set { SetProperty(ref _someText, value); }
}
}
na visão XAML:
<TextBox Text="{Binding SomeText}"/>
na barra de ferramentas XAML:
<Button Command="{Binding SaveCommand}" ToolTip="Save">
</Button>
ViewModel para a barra de ferramentas:
public class ToolbarViewModel : BindableBase
{
private ICommand _saveCommand;
public ICommand SaveCommand
{
get
{
return _saveCommand ?? (_saveCommand = new BaseCommandHandler(() => {
//Save code
}, () => true));
}
}
}
código para 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();
}
}
Alguém sabe uma maneira simples para se certificar de que o foco é perdido ou uma forma de acionar o conjunto de eventos de propriedades vinculáveis