xamarin - Xamarin Forms:从 DataTemplate 调用 ViewModel 的命令
问题描述
我在这里遇到了一个绑定问题。
我在控件模板中创建了一个可绑定布局:
<ContentView x:Name="SettingsMenu" ControlTemplate="{StaticResource HeaderTemplate}" AbsoluteLayout.LayoutBounds="0.5,0.5,1,1"
AbsoluteLayout.LayoutFlags="All">
<ScrollView Orientation="Vertical" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand">
<StackLayout x:Name="SettingsStack" BindableLayout.ItemsSource="{Binding Settings}" BindableLayout.ItemTemplateSelector="{StaticResource SettingsSelectorTemplate}" Orientation="Vertical" Spacing="0" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" />
</ScrollView>
</ContentView>
我想要做的是在视图模型中调用一个命令。该调用位于项目模板选择器中,作为 App.xml 中的资源字典
<ResourceDictionary>
<DataTemplate x:Key="PlaceholderSettingsTemplate">
### SOME STUFF
</DataTemplate>
<DataTemplate x:Key="HeaderSettingsTemplate">
### SOME STUFF
<Grid ...>
<Grid.GestureRecognizers>
<TapGestureRecognizer Tapped="ButtonClick" Command="{Binding BindingContext.SettingsTap, Source={x:Reference SettingsPage}}" CommandParameter="{Binding}" /> ########## <--------- WHAT TO USE FOR SOURCE?
</Grid.GestureRecognizers>
</Grid>
</DataTemplate>
<data:SettingsSelector x:Key="SettingsSelectorTemplate" Placeholder="{StaticResource PlaceholderSettingsTemplate}" Heading="{StaticResource HeaderSettingsTemplate}" Content="{StaticResource ContentSettingsTemplate}" />
</ResourceDictionary>
在将它移到 App.xml 文件的资源字典中之前,我只是使用了父 Contentview 的 x:Name。但是:我不能再按名称引用它,因为我将它移到了 App.xml 中的资源字典中。
现在,答案可能微不足道,但我找不到解决方案。
任何帮助表示赞赏。
亲切的问候
解决方案
您可以SettingsStack
使用包含所有内容的数据模板的 Grid 找到 StackLayout。由于与SettingsStack
父内容视图具有相同的绑定上下文,因此您可以访问 App.cs 中的绑定上下文,例如:
<DataTemplate x:Key="HeaderSettingsTemplate">
<!--### SOME STUFF-->
<Grid x:Name="ParentGrid">
<Grid.GestureRecognizers>
<TapGestureRecognizer Command="{Binding Parent.BindingContext.SettingsTap, Source={x:Reference ParentGrid}}" CommandParameter="{Binding}" />
</Grid.GestureRecognizers>
</Grid>
</DataTemplate>
的ParentGrid
父级SettingsStack
在您的当前页面上。
推荐阅读
- angular - 如何在 Angular slickgrid 中使用格式化程序创建自定义工具提示而不创建角度组件?
- c++ - 窗口上的 Tesseract api 链接器(或构建?)问题
- aws-amplify - 放大开发者菜单 - 如何禁用它
- aws-api-gateway - 是否可以在 AWS API Gateway 中记录请求正文大小?
- javascript - Vue v-for not update model variable
- algorithm - 为什么我的递归归并排序算法会导致堆栈溢出?
- git - 变基后 git checkout 到原点
- python - 如何在odoo中将属性添加到没有属性的现有字段
- android - 嵌套 RecyclerView 中的 LiveData
- python - 您如何在 Django 框架中的 StructValue 中提取计数?