我的页面上有一个ContentView,它使用DataTriggers从定义为静态资源的ControlTemplate中消费其内容,基于绑定ViewModel的布尔属性的状态:
<ContentPage.Resources>
<ControlTemplate x:Key="template1">
<local:AnotherContentView />
<!-- Here AnotherContentView needs to have one of its method called. -->
</ControlTemplate>
<ControlTemplate x:Key="template2">
</ControlTemplate>
</ContentPage.Resources>
<ContentView x:Name="templatedView" >
<ContentView.Triggers>
<DataTrigger TargetType="ContentView" Binding="{Binding BoolValueFromViewModel}" Value="True">
<Setter Property="ControlTemplate" Value="{StaticResource template1}"/>
</DataTrigger>
<DataTrigger TargetType="ContentView" Binding="{Binding BoolValueFromViewModel}" Value="False">
<Setter Property="ControlTemplate" Value="{StaticResource template2}"/>
</DataTrigger>
</ContentView.Triggers>
</ContentView>
字符串
->在第3行,你可以看到AnotherContentView,这是一个自定义控件,需要在它出现在页面上的事件上调用它的一个方法(用于UI更新目的)。我已经尝试在ContentPage和ContentView的代码上使用OnApplyTemplate,并在ContentView的代码上使用OnAppearing,但没有成功。
希望这种方法是正确的,我只是错过了一些东西?非常感谢任何输入
编辑:“AnotherContentView需要有一个名为”->为什么?因为AnotherContentView包含一个GraphicsView元素,该元素每隔x毫秒失效一次,因此需要重新绘制。我试图实现的只是渲染一个随时间推移而减少的 Jmeter 。
处理GraphicsView更新的方法看起来像这样:
public async Task LoopGaugeDrawing()
{
do
{
_progressGauge.TargetTime = Duration;
_progressGauge.ElapsedTime = Duration.Subtract(RemainingTime);
ProgressView.Invalidate();
await Task.Delay(TimeSpan.FromMilliseconds(Constants.TimerTickMilliseconds));
}
while (!ConditionFromViewModel);
}
型
1条答案
按热度按时间kkbh8khc1#
我发现在ContentView对象中使用下面的方法可以实现我想要实现的目标,尽管我仍然不确定我的方法是否正确。
字符串