如何绑定在Main上下文ViewMOdel xamarin表单中声明的​​子类对象的命令

时间:2017-11-09 05:08:57

标签: c# xaml xamarin xamarin.forms

我有一个页面(MyPage)和相应的视图模型(MypageViewModel)。我有另一个名为(listItemLogicVM)的视图模型,它在MypageViewModel中声明为可观察的集合。

MyPage XAML

  <ListView x:Name="lstvwItemSelected" ItemsSource="{Binding 
     LstlistItemLogicVM}">
            <ListView.ItemTemplate>
                <DataTemplate>
                       <ViewCell >
                         <StackLayout>
                            <Entry Text="{Binding RequestingQty,Mode=TwoWay}"/>
                             <Image Source="ArrowUp.png"><Image.GestureRecognizers>
                                <TapGestureRecognizer Command="{Binding QtyDecrementCommand}"/>
                                </Image.GestureRecognizers>
                             </Image>
                         </StackLayout>
                       </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
   </ListView>

MypageViewModel

  public class MypageViewModel
      {
       ObservableCollection<listItemLogicVM> lstvwItemSelected = new ObservableCollection<listItemLogicVM>()
          .
          -- OtherLogics
          .
      }

listItemLogicVM

    public class listItemLogicVM
     {
          public Command QtyDecrementCommand { get; set; }
           public int RequestingQty
             {
               get { return _requestingQty; }
               set { _requestingQty = value; OnPropertyChanged();}
             }
     }

以上绑定抛出错误。任何人都可以帮我将 listItemLogicVM 的命令和属性绑定到 MyPage XAML

中的列表视图

2 个答案:

答案 0 :(得分:0)

您需要在MypageViewModel中添加命令,并且您的xaml代码如下所示:

<TapGestureRecognizer Command="{Binding Source={x:Reference lstvwItemSelected}, Path=BindingContext.QtyDecrementCommand}"/>
                                </Image.GestureRecognizers>

答案 1 :(得分:0)

在我看来,你的listview XAML是不正确的。试试这个(请注意,只有对ListView的 x:Name ItemsSource 属性进行了更改):

<ListView x:Name="myUniqueListName" ItemsSource="{Binding 
     lstvwItemSelected}">
            <ListView.ItemTemplate>
                <DataTemplate>
                       <ViewCell >
                         <StackLayout>
                            <Entry Text="{Binding RequestingQty,Mode=TwoWay}"/>
                             <Image Source="ArrowUp.png"><Image.GestureRecognizers>
                                <TapGestureRecognizer Command="{Binding QtyDecrementCommand}"/>
                                </Image.GestureRecognizers>
                             </Image>
                         </StackLayout>
                       </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
   </ListView>

应该在列表中点击的项目上调用QtyDecrementCommand。这假定您已为列表中的每个项目正确地为该命令分配了一些代码。