2014-10-09 44 views
0

我正在使用wpf擴展工具包的嚮導控件,但現在我面臨一個問題。這是我的看法:wpf嚮導工具包驗證後單擊下一步

<xctk:Wizard Width="300" Height="300" HelpButtonVisibility="Collapsed" FinishButtonVisibility="Visible" Name="wizard" Next="wizard_Next"> 
<i:Interaction.Triggers> 
    <i:EventTrigger EventName="Next"> 
     <mvvm:EventToCommand Command="{Binding NextCommand}" PassEventArgsToCommand="True"/> 
    </i:EventTrigger> 
</i:Interaction.Triggers> 
<xctk:WizardPage x:Name="Step1Page" PageType="Blank" CanSelectNextPage="{Binding CanGoNext}" FinishButtonVisibility="Collapsed"> 
    <Grid Margin="10"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="Auto"/> 

     </Grid.RowDefinitions> 
     <TextBlock Grid.Row="0" FontSize="14" Foreground="Red" Text="Log in to Vodafone One Net"/> 
     <StackPanel Grid.Row="1" Margin="0,15,0,0"> 
      <TextBlock Text="Step 1" FontWeight="SemiBold"/> 
      <TextBlock Text="Please enter your mobile number"/> 
     </StackPanel> 
     <xctk:WatermarkTextBox Grid.Row="2" Name="mobileNumber" PreviewKeyDown="OnPreviewKeyDown" AcceptsReturn="False" AcceptsTab="False" Watermark="Enter mobile number" Text="{Binding MobileNumber}" Margin="0,10,0,0"> 
      <i:Interaction.Triggers> 
       <i:EventTrigger EventName="TextChanged"> 
        <i:InvokeCommandAction Command="{Binding MobileNumberTextChangedCommand}" CommandParameter="{Binding ElementName=mobileNumber, Path=Text}"/> 
       </i:EventTrigger> 
      </i:Interaction.Triggers> 

      <i:Interaction.Behaviors> 
       <v:AllowableCharactersTextBoxBehavior RegularExpression="^\d+$" MaxLength="50" /> 
      </i:Interaction.Behaviors> 
     </xctk:WatermarkTextBox> 

    </Grid> 
</xctk:WizardPage> 

....

然後在我的視圖模型與CanGoNext我成爲一種驗證,所以用戶可以去旁邊或無(取決於如果文本框填充有或沒有)。

當用戶點擊下一步,我做一個REST調用來驗證號碼,如果號碼不是有效的號碼,我不想去第2步,但嚮導總是進入第2步。

我甚至試圖通過CancelRoutedEventArgs在我RelayCommand這樣做:

public async Task Next(CancelRoutedEventArgs e) 
{ 
    var resp = await this._requestService.PostRequestPin(this.MobileNumber); 

    if (resp.StatusCode == ERROR) 
    { 
     e.Cancel = true; 
     e.Handled = true; 
    } 

} 

用戶總是轉到步驟2。任何人有任何想法我可以做什麼?

謝謝。 Regards,

回答

0

找到解決方案。這太容易了。

RelayCommand CanExecute方法做我想要的。很容易,很多時間去那裏!

+0

您能否詳細解釋一下這個問題?如果將事件「Next」的InteractionTrigger添加到嚮導,下一個按鈕是否使用CanExecute? – dontbyteme 2016-05-31 11:25:50

+0

是的。當您定義RelayCommand第二個參數(CanExecute)時,您可以擁有一個執行所有驗證並返回true或false的方法。 – sexta13 2016-06-01 14:02:55