#xaml #xamarin #mvvm #xamarin.forms #viewmodel
#xaml #xamarin #mvvm #xamarin.forms #viewmodel
Вопрос:
У меня есть список игроков
public ObservableCollection<PlayerModel> Players { get; set; }
Для элементов с гибким описанием, которые можно привязать, установлено значение список игроков
<FlexLayout x:Name="playerscollection" Wrap="Wrap" BindableLayout.ItemsSource="{Binding Players}"/>
Представление элементов представляет собой отдельный вид содержимого «PlayerView» с ViewModel «PlayerVieModel», который имеет параметризованный конструктор.
Просмотр проигрывателя =>
<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,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 всегда равен нулю. Итак, я использовал привязку для модели
<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>
Выдает ошибку Missmatch x:аргумент
Комментарии:
1.
views:PlayerView
СодержитListview
? Можете ли вы поделиться этой частью кода? Илиplayerscollection
— это имяListview
.2. Я добавил PlayerView XAML …. «playerscollection» относится к flexlayout listview
3. Почему бы не добавить BindingContext
this.BindingContext = new MyPlayerViewModel(false, new PlayerModel() );
в свой фоновый код? Я добавляю вашPlayerView
код. затем я делаю тест сPlayerName
вEntry
. все работало как обычно. Вот скриншот запуска. imgur.com/a/3LBRxrb4. Мне нужно передать каждый элемент в коллекции players в элементах flexlayout в Playerview
5. Привязка другого VIEWMOELНА вашей странице гибкого описания? Если это так, вы можете добавить
BindingContext = new MyPlayerViewModel(false, new PlayerModel() )
непосредственно в PlayerView, когда вы добавите его на страницу гибкого описания, он будет у всехPlayerView
.