[英]Xamarin Forms - Xaml Element injected to every page
我正在尋找一種在使用 Xamarin Forms Shell 時將元素 (DXPopup) 注入每個頁面的方法。
我最初的想法是為 Tabbar 創建一個自定義渲染器並在 tabbar 上方注入彈出窗口。 但是,當我的選項卡包含在 FlyoutItem 中時,我遇到了障礙。 然后,我考慮了一個用於 ContentView 的自定義渲染器並添加了一個子元素,盡管遇到了 Android 想要 android 視圖的攔截器。
如何最好地解決這個問題?
期望的結果:DXpopup 元素添加到每個頁面,因此我們可以調用一個通用的顯示方法(通過中介類的消息)
我使用上面 Jason 建議的路線解決了這個問題:
Basepage - 有一個控制模板 Control Template 如:
<ControlTemplate x:Key="BasePageTemplate">
<StackLayout VerticalOptions="FillAndExpand">
//your element (in my case a DXPopup
<ContentPresenter VerticalOptions="FillAndExpand"/>
</StackLayout>
</ControlTemplate>
注冊到綁定上下文更改(在基頁的代碼后面):BindingContextChanged += SetBindingContext;
這是為了更新到消費頁面視圖模型。
所述 viewmodel 將有一個 baseViewmodel,我在其中注冊了注入的元素,如下所示:
private void SetBindingContext(object sender, EventArgs e)
{
if (BindingContext is not ViewModelBase baseVM) return;
var dxPopUp = GetTemplateChild("ElementName");
baseVM.DxPopUp = dxPopUp as DXPopup;
}
這反過來又允許我使用視圖模型基礎與元素交互(在我的例子中顯示它)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.