2017-03-23 77 views
2

我有一個顯示2個集合的屏幕。 在左側顯示部分列表。默認情況下,第一部分被選中。如果你點擊另一個部分,那麼就會選擇它。 在右側,我在一對多關係中列出了該部分的相關問題。贏得文本框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> 

我正在使用Prism和EventAggregator模式來更新在不同的ViewModel中選定的部分。 現在這個工程除了一個重要的問題。我只想在頁面加載後更新該部分。目前,這個事件在頁面加載時和答案改變時都被觸發。 我如何得到這個工作,所以負載被忽略?

回答

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。

然後ActivateCommand應該設置一個bool IsLoaded ViewModel的成員,以便它可以在您的IfQuestionSetCheckIfAnswered方法中測試。

+1

交互性:Interaction.Behaviors在WinRT中不受支持 – arame3333

+1

也許需要sdk,看看這個例子[answer](https://social.msdn.microsoft.com/Forums/windowsserver/en-US/29c709d8-6ddb -4e19-b8c2-6a035b1bcb41/uwpwill-there-be-a-behavior-sdk-to-support-eventtriggerbehavior-invokecommandaction?forum = wpdevelop)... –

+2

或者只是在後面的代碼中處理'Loaded'事件並轉發事件到視圖模型? –