2017-03-23 4 views
2

2 개의 모음을 보여주는 화면이 있습니다. 왼쪽에는 섹션 목록이 표시됩니다. 기본적으로 첫 번째 섹션이 선택됩니다. 다른 섹션을 클릭하면 해당 섹션이 선택됩니다. 오른쪽에는 일대 다 관계에서 해당 섹션에 대한 관련 질문 목록이 있습니다.텍스트 상자의 Win Rt 변경 이벤트

그래서 각 질문은 섹션에 속하며 섹션에는 1에서 많은 질문을 가질 수 있습니다.

일부 질문에는 대답이 있어야하며 일부 대답은 선택 사항입니다. 사용자가 필요한 질문을 쉽게 찾을 수 있도록 응답 텍스트 상자 옆에 빨간색 별표가 표시됩니다. 그 질문에 답이 생기면 그 질문은 사라집니다.

또한 답이없는 질문이있는 각 섹션에 별표를 표시해야합니다. 그들이 모두 응답하면 섹션에 대한 별표도 사라집니다.

시각적 트리는이 형식입니다. SurveyPageViewModel - SurveyViewModel - SectionViewModel - QuestionViewModel

아래 코드는 (포함 응답 특성)을 QuestionViewModel와 XAML 코드를 보여줍니다 그래서 나는 생각하지 않는다 섹션을 업데이트하는 방법까지 시각적 트리가 DataTemplate이에 .

내 대답 속성에 대한 내 (단순화 된) 처리기 코드는 다음과 같습니다.

private string _answer; 
public string Answer 
{ 
    get 
    { 
     return _answer; 
    } 
    set 
    { 
     if (SetProperty(ref _answer, value)) 
     { 
      this.IfQuestionSetCheckIfAnswered(this.IsRequiredOnScreenAnswer); 
     } 
    } 
} 

private void IfQuestionSetCheckIfAnswered(bool value) 
{ 
    if (this.IsRequired && string.IsNullOrWhiteSpace(this.Text) == false) 
    { 
     this.EventAgg.GetEvent<RequiredAnswerUpdatedEvent>().Publish(value); 
    } 
} 

및 XAML (질문/답변);

<StackPanel Orientation="Horizontal" Grid.Row="1" Grid.ColumnSpan="2" Grid.Column="0" Margin="0, 0, 0, 5"> 
       <TextBox Grid.Row="1" 
         Text="{Binding Path=Answer, Mode=TwoWay}" 
         MinWidth="300" 
         IsReadOnly="{Binding Path=IsReadOnly}" /> 
       <TextBlock Text="*" FontSize="40" FontWeight="Bold" 
        Style="{StaticResource ResourceKey=RequiredSignal}" Margin="5, 0, 0, 0" 
        Visibility="{Binding Path=IsRequiredOnScreenAnswer, Converter={StaticResource ResourceKey=BooleanToVisibilityConverter}}" /> 
      </StackPanel> 

내가 다른 뷰 모델에 선택한 섹션을 업데이트 프리즘과 EventAggregator 패턴을 사용하고 있습니다. 이제는 중요한 한 가지 문제를 제외하고는 작동합니다. 페이지가로드 된 후에 만 ​​섹션을 업데이트하려고합니다. 현재이 이벤트는 페이지가로드되고 응답이 변경 될 때 발생합니다. 로드가 무시되도록하려면 어떻게해야합니까?

답변

2

페이지가로드 된 후에 만 ​​섹션을 업데이트하고 싶습니다. 현재이 이벤트는 페이지가로드되고 응답이 변경 될 때 발생합니다.

페이지가
<interactivity:Interaction.Behaviors> 
    <core:EventTriggerBehavior EventName="Loaded"> 
     <core:InvokeCommandAction Command="{Binding ActivateCommand}" /> 
    </core:EventTriggerBehavior> 
</interactivity:Interaction.Behaviors> 

위를

로드되면 내가 업데이트를 활성화하는 명령을 정의하는 것

가 WinRT의 행동 SDK (또는 UWP에 NuGet package)가 필요합니다, 또는 당신이 처리 할 수 Loaded 이벤트를 코딩하여 ViewModel에도 전달합니다.

그러면 ActivateCommandIfQuestionSetCheckIfAnswered 메서드 내에서 테스트 할 수 있도록 ViewModel의 멤버를 bool IsLoaded으로 설정해야합니다.

+1

상호 작용 : WinRT에서 Interaction.Behaviors가 지원되지 않습니다. – arame3333

+1

아마이 sdk가 필요합니다.이 [답변] (https://social.msdn.microsoft.com/Forums/windowsserver/en-US/29c709d8-6ddb)에서 찾으십시오. -4e19-b8c2-6a035b1bcb41/uwpwill-be-a-be-a-behaviour-sdk-to-support-eventtriggerbehavior-invokecommandaction 포럼 = wpdevelop) ... –

+2

아니면 그냥 코드에서'Loaded' 이벤트를 처리하고 이벤트를 릴레이합니다. 뷰 모델에? –

관련 문제