【发布时间】:2020-04-28 15:13:30
【问题描述】:
我在一个页面中有两个自定义视图,一次只能看到其中一个。 我希望仅在视图变得可见时才初始化视图*。但是发生的情况是 Xamarin 初始化页面中的每个视图,我尝试了几种方法,试图告诉 Xamarin:“现在不要初始化它”,这是其中之一:
<ContentView>
<ContentView.Triggers>
<DataTrigger TargetType="ContentView" Binding="{Binding ViewType,Mode=TwoWay}" Value="0">
<Setter Property="Content">
<Setter.Value>
<views:View1/>
</Setter.Value>
</Setter>
</DataTrigger>
<DataTrigger TargetType="ContentView" Binding="{Binding ViewType,Mode=TwoWay}" Value="1">
<Setter Property="Content">
<Setter.Value>
<views:View2/>
</Setter.Value>
</Setter>
</DataTrigger>
</ContentView.Triggers>
</ContentView>
我第一次尝试这段代码时的预期是:当ViewType 更改为0 时,Content 属性会得到一个新的new View1(),与View2 相同,但两者都在页面仅在第一次加载。
为了说明我为什么需要这个,我有一个显示地图或CollectionView 的页面,由于地图控件中的绑定限制,我在代码隐藏中初始化控件时完成所有工作,所以每当持有地图的视图变得可见(意味着数据可能已更改)时,我需要重新初始化控件以更新地图。
根据上面的例子,我想要实现的是,当自定义视图变得可见时,我希望它被初始化,无论是在页面加载时还是在数据绑定发生变化时。
*by visibility 我的意思是它在显示器上的存在,而不是严格意义上的IsVisible 属性。
【问题讨论】:
-
如果你想要更多的控制,然后用 C# 构建它,而不是 XAML
-
我希望至少现在远离这个选项,这个项目老旧且复杂,无法进行此更改
-
这就是
DataTriggers的工作方式,它们使所有选项都准备就绪,并在触发器被调用后立即替换! -
@FreakyAli 我认为 XAML 页面中的每个视图在页面加载时都会被初始化,无论它是如何嵌入的
-
这不是我们通常想要的吗?你的情况显然是个例外
标签: xaml xamarin.forms data-binding custom-controls