2

如果将Silverlight Toolkit NumericUpDown控件绑定到MVVM属性和RelayCommand触发器集(任何事件),则在NumericUpDown更改MVVM属性值之前调用此命令。这意味着,你不能用你的方法/动作/命令使用新(改)值...在Silverlight 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.

有没有办法让这项工作?

回答

1

哦,孩子,是不容易的,但在这里妳:

XAML部分:

<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

相关问题