Команда ретрансляции MVVM срабатывает до изменения значения Silverlight NumericUpDown - PullRequest
2 голосов
/ 25 ноября 2010

Если у вас есть элемент управления Silverlight Toolkit NumericUpDown, связанный со свойством MVVM, и набор триггеров RelayCommand (любое событие), команда вызывается до того, как NumericUpDown изменит значение свойства MVVM.Это означает, что вы не можете использовать новое (измененное) значение с вашим методом / действием / командой ...

XAML:

<inputToolkit:NumericUpDown x:Name="testNum" Value="{Binding RegisterForm, Mode=TwoWay}">
<i:Interaction.Triggers>
  <i:EventTrigger EventName="ValueChanged">
    <GalaSoft_MvvmLight_Command:EventToCommand Command="{Binding DoSomethingCommand}"/>
  </i:EventTrigger>
</i:Interaction.Triggers>
</inputToolkit:NumericUpDown>

MVVM (C #):

DoSomethingCommand = new RelayCommand(() =>
            {
                OtherRegisterForm = RegisterForm;
            });

В этом случае, если у вас есть значение v 0 и вы вводите новое значение 123 в элементе управления NumericUpDown, это вызывает «DoSomethingCommand» перед событием «RaisePropertyChange» в свойстве MVVM.«OtherRegisterForm» будет 0, а не 123.

Есть ли способ заставить эту работу?

1 Ответ

1 голос
/ 03 декабря 2010

о, парень, это было нелегко, но вот вы:

xaml part:

<toolkit:NumericUpDown Value="{Binding SomeNumber}">
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="ValueChanged">
                <GalaSoft_MvvmLight_Command:EventToCommand Command="{Binding MyCommand}" PassEventArgsToCommand="True" />
            </i:EventTrigger>
        </i:Interaction.Triggers>
    </toolkit:NumericUpDown>

и код CS:

    public class MainViewModel : ViewModelBase
{

    public double SomeNumber { get; set; }

    public MainViewModel()
    {
        SomeNumber = 10;
        MyCommand = new RelayCommand<RoutedPropertyChangedEventArgs<double>>(myActionMethod);
    }

    public RelayCommand<RoutedPropertyChangedEventArgs<double>> MyCommand { get; set; }

    public void myActionMethod(RoutedPropertyChangedEventArgs<double> arg)
    {
        MessageBox.Show(arg.NewValue.ToString());
    }
}

надеюсь, что это поможет,Arek

...