【发布时间】:2022-10-07 09:07:49
【问题描述】:
我在选项卡式 MAUI 应用程序 (.NET 6) 中使用了 Shell.SearchHandler。我将我的应用程序启动到一个特定页面,您可以在其中通过 API 搜索一组“外部联系人”。我有一个额外的页面来再次通过 API 搜索一组系统用户。当应用程序初始化时。如果我导航到用户页面,它不会更新搜索处理程序,并且搜索功能仍在使用初始页面的模板。
是否可以修改每个页面上的模板?
ContactsPage.xaml
<Shell.SearchHandler>
<controls:ExternalContactSearchHandler Placeholder=\"Enter last name\"
ShowsResults=\"true\"
ItemTemplate=\"{StaticResource ExternalContactSearchTemplate}\"
ExternalContacts=\"{x:Static data:ExternalContactData.ExternalContacts}\"
SelectedItemNavigationTarget=\"{x:Type views:ContactDetailPage}\" />
</Shell.SearchHandler>
用户.xaml
<Shell.SearchHandler>
<controls:UserSearchHandler Placeholder=\"Enter User Name\"
ShowsResults=\"true\"
ItemTemplate=\"{StaticResource UserSearchTemplate}\"
Users=\"{x:Static data:UserData.Users}\"
SelectedItemNavigationTarget=\"{x:Type views:UserDetailPage}\" />
</Shell.SearchHandler>
应用程序.xaml
<DataTemplate x:Key=\"UserSearchTemplate\">
<Grid Padding=\"10\"
ColumnDefinitions=\"0.15*,0.85*\">
<Image Source=\"{Binding Images[1].ImageUri}\"
HeightRequest=\"40\"
WidthRequest=\"40\" />
<Label Grid.Column=\"1\"
Text=\"{Binding Name}\"
FontAttributes=\"Bold\"
VerticalOptions=\"Center\" />
</Grid>
</DataTemplate>
<DataTemplate x:Key=\"ExternalContactSearchTemplate\">
<Grid Padding=\"10\" ColumnDefinitions=\"Auto,Auto,Auto\">
<Label Grid.Column=\"0\"
Text=\"{Binding FirstName}\"
FontAttributes=\"Bold\"
HorizontalOptions=\"Start\"
VerticalOptions=\"Center\" />
<Label Grid.Column=\"1\"
Text=\"{Binding LastName}\"
FontAttributes=\"Bold\"
HorizontalOptions=\"Start\"
VerticalOptions=\"Center\" />
<Label Grid.Column=\"2\"
Text=\"{Binding Title}\"
FontAttributes=\"Bold\"
HorizontalOptions=\"End\"
VerticalOptions=\"Center\" />
</Grid>
</DataTemplate>
-
我没有使用过这个,但我认为你需要在 c# 中设置搜索处理程序而不是 xaml。见Consume a SearchHandler,下面的c#代码sn-p\"等效的 C# 代码是:\".
-
感谢@ToolmakerSteve,但奇怪的是,当我在每个页面的构造函数中设置代码隐藏版本时,它似乎也不起作用。我(不幸地)认为我可能需要在导航时拆除并重建整个 Shell 资源,这令人沮丧且资源密集,但我至少知道我需要做什么。