2

如果您将 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,并且您在 NumericUpDown 控件中输入了一个新值 123,它会在 MVVM 属性上的“RaisePropertyChange”事件之前触发“DoSomethingCommand”。“OtherRegisterForm”将是 0 而不是 123。

有没有办法使这项工作?

4

1 回答 1

1

哦,男孩,这并不容易,但你在这里:

xml部分:

<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());
    }
}

希望有帮助,阿雷克

于 2010-12-03T11:48:22.727 回答