2017-11-25 10 views
0

사용자의 선택에 따라 모든 질문을 건너 뛰고 대화 상자가 종료 될 수 있는지 알고 싶습니다. 다른 질문을 건너 뛸 "ContentClassification"의 선택에 따라선택에 따라 질문 건너 뛰기

public ContentClassification ContentClassification {get;set;} 

public StatusOfContent StatusContent {get; set;} 

public Accessibility ExternalSharing {get; set;} 

:

예, 나는 다음 코드가 있습니다.

미리 감사드립니다.

답변

1

"ContentClassification"의 선택에 따라 다른 질문은 건너 뜁니다.

당신은, 예를 들어 자신의 IField 당신의 구현 FieldReflector을 사용할 수 있습니다

:

public enum ContentClassification 
{ 
    Confidential_Restricted = 1, 
    Confidential_Secret = 2, 
    Public = 3, 
    Strictly_Confidential = 4, 
    help = 5 
}; 

public enum StatusContent 
{ 
    Status1, 
    Status2 
} 

public enum Accessibility 
{ 
    Accessibility1, 
    Accessibility2 
} 

[Serializable] 
public class Classification 
{ 
    public ContentClassification? Choice { get; set; } 
    public StatusContent? StatusOfContent { get; set; } 
    public Accessibility? Accessibility { get; set; } 

    public static bool Confirmation = true; 

    public static IForm<Classification> BuildForm() 
    { 
     return new FormBuilder<Classification>() 
      .Message("You want to") 
      .Field(new FieldReflector<Classification>(nameof(Choice)) 
        .SetNext((value, state) => 
        { 
         var selection = (ContentClassification)value; 
         if (selection == ContentClassification.help) 
         { 
          Confirmation = false; 
          state.Accessibility = null; 
          state.StatusOfContent = null; 
         } 
         else 
         { 
          Confirmation = true; 
         } 
         return new NextStep(); 
        })) 
       .Field(new FieldReflector<Classification>(nameof(StatusOfContent)) 
        .SetActive(state => Confirmation)) 
       .Field(new FieldReflector<Classification>(nameof(Accessibility)) 
        .SetActive(state => Confirmation)) 
      .Build(); 
    } 
} 

그리고 RootDialog에서이 코드를 사용하여

[Serializable] 
public class RootDialog : IDialog<object> 
{ 
    public Task StartAsync(IDialogContext context) 
    { 
     var form = new FormDialog<Classification>(new Classification(), Classification.BuildForm, FormOptions.PromptInStart, null); 
     context.Call(form, this.GetResultAsync); 

     return Task.CompletedTask; 
    } 

    private async Task GetResultAsync(IDialogContext context, IAwaitable<Classification> result) 
    { 
     var state = await result; 
     //TODO: 
    } 
} 

때 사용자가 첫 번째 대화에서 Help를 선택 Choice을 입력하면 다음 두 가지 질문을 건너 뜁니다. resultGetResultAsync이고 Choice = Help, StatusOfContent = null, Accessibility = null 등등.