微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将参数从列表传递给ViewModel构造函数

如何解决将参数从列表传递给ViewModel构造函数

我有一个玩家列表

public ObservableCollection<PlayerModel> Players { get; set; }

flexlayout可绑定项设置为玩家列表

<FlexLayout x:Name="playerscollection" Wrap="Wrap" BindableLayout.ItemsSource="{Binding Players}"/>

items视图是带有viewmodel“ PlayerVieModel”的单独的内容视图“ PlayerView”,具有参数化的构造函数

PlayerView =>

<ContentView.Content>

        <StackLayout>


        <StackLayout  Orientation="Horizontal" HorizontalOptions="FillAndExpand" >

            <Entry x:Name="entry" Placeholder="الاسم" HorizontalOptions="FillAndExpand"  Text="{Binding PlayerName}" />
            <Label  TextColor="Black" FontSize="Medium" HorizontalOptions="End" Text="اللاعب" VerticalOptions="Center"/>
        </StackLayout>

        <views:SportsListView x:Name="sportsList" BindingContext="{Binding Listviewmodel}"   
                                              HorizontalOptions="FillAndExpand"
                                              Pickervisibility="True"/>

        <Label x:Name="payment" Text="{Binding Source={x:Reference sportsList},Path=BindingContext.SportsTotalPayments,StringFormat='{0:D2}'}" HorizontalTextAlignment="Start" Margin="0,10,0" Padding="0" VerticalTextAlignment="Center" HorizontalOptions="CenterandExpand" FontSize="20"/>


    </StackLayout>

</ContentView.Content>

public Playerviewmodel(bool showPicker = true,PlayerModel player = null){}

我需要将列表视图项绑定到PlayerVieModel

<FlexLayout x:Name="playerscollection" Wrap="Wrap" BindableLayout.ItemsSource="{Binding Players}">
    <BindableLayout.ItemTemplate>
        <DataTemplate>
            <views:PlayerView >
                <views:PlayerView.BindingContext>
                    <viewmodels:Playerviewmodel>
                        <x:Arguments>
                                <x:Boolean>false</x:Boolean>
                                <models:PlayerModel/>
                            </x:Arguments>
                    </viewmodels:Playerviewmodel>
                </views:PlayerView.BindingContext>
            </views:PlayerView>
        </DataTemplate>
    </BindableLayout.ItemTemplate>
</FlexLayout>

但是PlayerModel始终为null。所以,我在模型上使用了biniding

            <viewmodels:Playerviewmodel>
                <x:Arguments>
                        <x:Boolean>false</x:Boolean>
                        <models:PlayerModel 
                            PlayerName="{Binding Source={x:Reference playerscollection},Path=PlayerName}" 
                            PlayerPayment="{Binding Source={x:Reference playerscollection},Path=PlayerPayment}" 
                            Sports="{Binding Source={x:Reference playerscollection},Path=Sports}" />
                    </x:Arguments>
            </viewmodels:Playerviewmodel>

它给出错误错配x:argument

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。