我有一个显示2个收藏的屏幕。 在左侧,我显示了一个部分列表。默认情况下,选择第一部分。如果您单击另一个部分,则会被选中。 在右侧,我在一对多关系中列出了该部分的相关问题。
所以每个问题属于一个部分,一个部分可以有一到多个问题。
要获得答案需要一些问题,有些问题可以选择回答。 为方便用户查找所需问题,答案文本框旁边会显示一个红色星号。当这个问题得到解答时,它就会消失。
另外,我需要为每个有未解答问题的部分显示星号。一旦他们全部回答,该部分的星号也会消失。
可视化树具有这种格式; SurveyPageViewModel - SurveyViewModel - SectionViewModel - QuestionViewModel
下面的代码显示了QuestionViewModel(其中包含了answer属性),而XAML代码位于DataTemplate中,所以我认为Visual Tree没有一种方法可以更新该部分。
所以我的answer属性的(简化的)处理程序代码看起来像这样;
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中的Selected Section。 现在除了一个重要的问题外,这个工作。我只想在页面加载后更新该部分。目前,在加载页面和答案更改时都会触发此事件。 如何让它工作,以便忽略负载?
答案 0 :(得分:2)
我只想在页面加载后更新该部分。目前,在加载页面和答案更改时都会触发此事件。
我定义了一个在加载页面后激活更新的命令
<interactivity:Interaction.Behaviors>
<core:EventTriggerBehavior EventName="Loaded">
<core:InvokeCommandAction Command="{Binding ActivateCommand}" />
</core:EventTriggerBehavior>
</interactivity:Interaction.Behaviors>
以上需要WinRT上的Behavior SDK(或UWP上的NuGet package),或者您可以在代码后面处理Loaded
事件并将其转发到ViewModel。
然后ActivateCommand
应该设置ViewModel的bool IsLoaded
成员,以便可以在IfQuestionSetCheckIfAnswered
方法中对其进行测试。