如何将图像按钮命令从DataTemplate选择器绑定到ViewModel?

时间:2019-08-21 22:09:33

标签: c# xamarin xamarin.forms prism syncfusion

我正在与SyncFusion's TreeView合作。我有一个带有三个单独的DataTemplate / Custom View单元的TreeView。在我的主要XAML中,我有下面的树状视图代码,绑定到我的DataTemplates。

SamplePage.xaml

<syncfusion:SfTreeView x:Name="treeView"
       QueryNodeSize="TreeView_QueryNodeSize"
       NodeSizeMode="Dynamic"
       AutoExpandMode="RootNodesExpanded"
       ChildPropertyName="SubFiles"
       ItemsSource="{Binding ImageNodeInfo}" Indentation="0" 
       ItemTemplate="{StaticResource TemplateSelector}">
</syncfusion:SfTreeView>

我现在正在尝试将命令从数据模板之一(下面的代码)绑定到连接到页面的视图模型,但似乎无法连接数据绑定。在线大多数示例在view / viewModel的同一xaml页面上显示数据模板。但是,我的代码使用的是数据模板选择器,这给了我更难的绑定路径。

SampleTemplate.xaml

<ViewCell.BindingContext>
    <local:SamplePage x:Key="SamplePage">
    </local:SamplePage>
</ViewCell.BindingContext>



   <ImageButton Aspect="AspectFill"
      Grid.Row="0" Grid.Column="3" 
      HorizontalOptions="End" 
      WidthRequest="90" HeightRequest="90" 
      Source="{xaml:ImageResource plus_Icon}"
      Command="{Binding Path=BindingContext.AddAsJobClickedCommand}, Source={x:Reference SamplePage}" 
      CommandParameter="{Binding treeView}" 
                                 />  

2 个答案:

答案 0 :(得分:1)

您可能希望列表数据模板中的代码可以直接从视图模型中调用命令,并将当前项目传递给视图模型以执行必要的操作,我建议您看一下:

https://doumer.me/xamarin-forms-listview-advanced-guide-with-mvvm/

1。我们需要在列表数据模板中创建属性。这些属性将包含其父视图的BindingContext并从中获取命令。

2。将Binding上下文从xaml传递到数据模板

3。在数据模板中接收绑定上下文,绑定命令并将当前项目作为命令的参数传递。

答案 1 :(得分:1)

尝试此操作,可能您缺少该命令的x:Reference

<ImageButton Aspect="AspectFill"
             Grid.Row="0" Grid.Column="3" 
             HorizontalOptions="End" 
             WidthRequest="90" HeightRequest="90" 
             Source="{xaml:ImageResource plus_Icon}"
             Command="{Binding Path=BindingContext.AddAsJobClickedCommand, Source={x:Reference treeView}}"
             CommandParameter="{x:Reference treeView}"/>

注意:此处 treeView 是SfTreeView的x:Name

在此处找到Reference