我的屏幕显示 2 个集合。 在左侧,我显示了部分列表。默认情况下,选择第一部分。如果您单击另一个部分,则该部分将被选中。 在右侧,我有一个一对多关系中该部分的相关问题列表。
因此每个问题都属于一个部分,一个部分可以有 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 中的选定部分。 现在,除了一个重要问题之外,这一切都有效。我只想在页面加载后更新该部分。目前,当页面加载时和答案更改时都会触发此事件。 我如何让它工作以便忽略负载?
最佳答案
I only want to update the section once the page is loaded. Currently this event is fired both when the page is loaded AND when the answer changes.
我会定义一个命令来在页面加载后激活更新
<interactivity:Interaction.Behaviors>
<core:EventTriggerBehavior EventName="Loaded">
<core:InvokeCommandAction Command="{Binding ActivateCommand}" />
</core:EventTriggerBehavior>
</interactivity:Interaction.Behaviors>
上述内容需要 WinRT 上的 Behaviour SDK(或 UWP 上的 NuGet package),或者您也可以在后面的代码中处理 Loaded
事件并将其中继到 ViewModel。
然后,ActivateCommand
应该设置 ViewModel 的 bool IsLoaded
成员,以便可以在您的 IfQuestionSetCheckIfAnswered
方法中对其进行测试。
关于c# - 赢得 TextBox 的 Rt 更改事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42973236/