【问题标题】:Bind Command to a template view from viewmodel xamarin prism从 viewmodel xamarin prism 将命令绑定到模板视图
【发布时间】:2018-11-26 13:22:01
【问题描述】:

我在项目中使用棱镜。我的问题是:我有一个 View OrdemServicoView 和一个模型 OrdemServicoViewModel,OrdemServicoView 有一个同步融合列表...里面有一个带有一些属性的 DataTemplate,我可以绑定,但是当我尝试在模板中使用命令时它不起作用,命令代码在 OrdemServicoViewModel 中...我该怎么做?

OrdemServicoViewModel:

public DelegateCommand<object> ItemSelectedCommand { get; set; }

OrdemServicoView(列表):

<syncfusion:SfListView.ItemTemplate>
      <DataTemplate>
         <templates:OrdemServicoCardView />
      </DataTemplate>
</syncfusion:SfListView.ItemTemplate>

在 OrdemServicoCardView 中,我尝试制作一个绑定 ItemSelectedCommand 的按钮

【问题讨论】:

    标签: xamarin prism


    【解决方案1】:

    您遇到的问题与绑定上下文有关。例如,通常在您的 View 中,您的 BindingContext 就是您的 ViewModel。当在 ListView 之类的内部使用 DataTemplate 时,您的 BindingContext 是您可能作为 ItemsSource 传递给该 ListView 的任何数据模型。因此,诀窍是能够引用回原始 ViewModel。

    <syncfusion:SfListView.ItemTemplate x:Name="lv">
      <DataTemplate>
        <Button Text="Some Button"
                Command="{Binding BindingContext.MyCommand,Source={x:Reference lv}}" />
      </DataTemplate>
    </syncfusion:SfListView.ItemTemplate>
    

    我们如何做到这一点相当简单,首先您需要为具有我们的 ViewModel 的元素提供一个名称,因为它是 Binding Context。你可以选择你真正喜欢的任何东西,我通常只是参考父页面,但实际的列表视图也可以正常工作。接下来,我们需要将该命名元素添加为绑定源。最后,我们需要意识到我们的新 Binding Context 是我们添加为 Source 的元素,因此我们必须在 Binding 之前添加 BindingContext 属性,以便在 ViewModel 中具有适当的范围。

    【讨论】:

    • 我试过但我得到这个错误 System.Reflection.TargetInvocationException:
    猜你喜欢
    • 2017-01-15
    • 2018-04-19
    • 2019-04-07
    • 1970-01-01
    • 2017-10-19
    • 2017-04-28
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    相关资源
    最近更新 更多