WP7] [MVVM Light Toolkit] Button Comando levantado muito cedo, antes de se ligar ao usar o MVVM-Light Toolkit
-
26-09-2019 - |
Pergunta
Estou usando o kit de ferramentas MVVM-Light no meu aplicativo Windows Phone 7.
Eu tenho na minha opinião:
<TextBox Height="78" HorizontalAlignment="Left" Margin="108,33,0,0" VerticalAlignment="Top" Width="313" Text="{Binding MyValue, Mode=TwoWay}" />
<Button Content="Go" Height="78" HorizontalAlignment="Left" Margin="127,252,0,0" Name="button1" VerticalAlignment="Top" Width="213" cmd:ButtonBaseExtensions.Command="{Binding DoCommand}" />
Meu modelo de visão é:
public class MainPageViewModel : ViewModelBase
{
public ICommand DoCommand { get; internal set; }
public MainPageViewModel()
{
DoCommand = new RelayCommand(() =>
{
DoSomethingWith(MyValue);
}, () => true);
}
private const string MyValuePropertyName = "MyValue";
private string _myValue;
public string MyValue
{
get { return _myValue; }
set
{
if (_myValue == value)
return;
_myValue = value;
RaisePropertyChanged(MyValuePropertyName);
}
}
}
No emulador, quando digito valor na caixa de texto e clico no botão, vejo que estou indo primeiro na expressão do RelrayCommand Lambda e com um ponto de interrupção, vejo que o MyValue é nulo. Em seguida, o ponto de interrupção no setter do MyValue é atingido e o valor correto vai no MyValue.
O que estou fazendo errado ? Claro, eu gostaria que o levantador possa ser alcançado antes do relayCommand ...
Agradecemos antecipadamente por qualquer ajuda.
Solução
É possível que você tenha atingido o problema do banco de dados do TextBox com o evento TextChanged. Este é um problema reconhecido em Silverlight 3, Veja este tópico discutindo esta questão e a solução alternativa. Uma solução interessante talvez seja usar comportamentos como discutido em Este artigo.
HTH, Indyfromoz