XAML 如何对ContentPage的子ContentView上的ControlTemplate属性更改做出React?

nsc4cvqm  于 2023-11-14  发布在  React
关注(0)|答案(1)|浏览(100)

我的页面上有一个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);
}

kkbh8khc

kkbh8khc1#

我发现在ContentView对象中使用下面的方法可以实现我想要实现的目标,尽管我仍然不确定我的方法是否正确。

protected async override void OnParentSet()
{
    base.OnParentSet();

    await LoopGaugeDrawing();
}

字符串

相关问题