Пожалуйста, мне нужна помощь.
У меня есть приложение Xamarin Form, которое очень хорошо работает с привязкой данных к своей модели представления с именем OrderDetailViewModel.
Но сегодня я должен добавить еще одно поле DataBinding в строку 10 Binding OrderStatusMessage
, которое связано с его файлом Xaml.cs (код позади), но из любопытства это поле не работает, я имею в виду, что оно не меняет текст метки динамически после привязки метки text в свойство, расположенное в его файле xaml.cs (код позади файла).
В строке 4 вы можете найти привязку данных к файлу MVVM с именем OrderDetailViewModel, который работает хорошо.
Но проблема в строке 10 Binding OrderStatusMessage
, которая представляет собой привязку данных к собственному файлу xaml.cs, не изменяет текст метки на новое сообщение.
Я протестировал тот же код Binding OrderStatusMessage
вне тега CollectionView.ItemTemplate, и он работает правильно, поэтому только когда я помещаю внутри тег CollectionView.ItemTemplate, он не извлекает обновленный текст.
В приведенном ниже коде есть только одно свойство, которое привязано к его файлу xaml.cs (код позади), который находится в строке 10 {Binding OrderStatusMessage}
, который не получает обновленный текст, остальные привязаны к MVVM, который работает хорошо.
PS: я хотел бы добавить множественную привязку к приведенному ниже коду в строке 4:
имя файла: OrderDetailViewPage.xaml
<CollectionView.ItemTemplate >
<DataTemplate >
<StackLayout
xct:TouchEffect.LongPressCommand = "{Binding LongPressCommand, Source = {RelativeSource AncestorType = {x:Type local:OrderDetailViewModel}}}"
xct:TouchEffect.LongPressCommandParameter = "{Binding .}"
xct:TouchEffect.PressedScale = "1.2"
xct:TouchEffect.NativeAnimation = "True">
<StackLayout>
<Label Text = "{Binding OrderStatusMessage}" HorizontalOptions = "CenterAndExpand" FontFamily = "fasolid" FontSize = "18" FontAttributes = "Bold" TextColor = "Black"/>
</StackLayout>
<Label Text = "{Binding Id}"
FontSize = "Medium"/>
<Label Text = "Order number" HorizontalOptions = "CenterAndExpand"/>
<Label Text = "{Binding OrderId}"
TextColor = "Purple" FontAttributes = "Bold"
FontSize = "Large" HorizontalOptions = "CenterAndExpand"/>
<Label Text = "{Binding OrderDetail}"
TextColor = "Purple"
FontSize = "Small" />
<Label Text = "{Binding OrderDate}"
TextColor = "Purple"
FontSize = "Small" />
<Label Text = "{Binding IsOrderComplete}"
TextColor = "Purple"
FontSize = "Small" />
</StackLayout>
</DataTemplate>
</CollectionView.ItemTemplate>
@Jason Большое спасибо за попытку помочь мне. Проблема не в VM, все привязки полей к MVVM работают хорошо. Есть только одно поле, которое привязывается к собственному файлу xaml.cs (код позади), а именно <Label Text = "{Binding OrderStatusMessage}" HorizontalOptions = "CenterAndExpand" FontFamily = "fasolid" FontSize = "18" FontAttributes = "Bold" TextColor = "Black"/> </StackLayout>
, которое не обновляется.
@Jason Но когда я перемещаю этот код из блока CollectionView.ItemTemplate, он работает хорошо и получает обновленное сообщение. Я где-то читал, что мне нужна множественная привязка.
Вы пытались связать свою метку внутри CollectionView.ItemTemplate, используя свойство Path?
Вот так: <Label Text = "{Binding Path=OrderStatusMessage, Source = {x:Reference pageName}}"/>
Спасибо за попытку помочь. Я попробовал ваш код и получил следующее сообщение об ошибке: Xamarin.Forms.Xaml.XamlParseException Message=Position 67:44. Не удается найти объект, на который ссылается OrderDetailViewPage
Source=Xamarin.Forms.Xaml
Вы использовали x:Name со своей страницы контента в качестве ссылки?
Должен ли x:Reference pageName быть реальным именем страницы? если это так, я сделал это, я изменил имя страницы на настоящее имя страницы OrderDetailViewPage, как показано ниже Source = {x:Reference OrderDetailViewPage}}
pageName может быть любым именем, так оно объявлено <ContentPage xmlns = "http://xamarin.com/schemas/2014/forms" xmlns:x = "http://schemas.microsoft.com/winfx/2009/xaml" ..... x:Name = "pageName">
Нет, я не устанавливал x:Name для страницы контента.
Попробуйте, это работает на моем коде
Огромное спасибо. Теперь он работает нормально, вы исправили мою проблему. Не могли бы вы предложить мне, какую книгу прочитать, чтобы улучшить свои навыки работы с Xamarin.Form?
Рад, что помог, но, к сожалению, у меня нет другого совета по книге, кроме того, что для меня лучший способ изучить Xamarin.Forms — это попрактиковаться и прочитать документацию (learn.microsoft.com/en-us/xamarin/xamarin-forms )
Большое спасибо за ваш совет. Но как мне нужно практиковаться? Нужно ли мне практиковать главу за главой после прочтения или создавать что-то вроде побочного проекта? Как вы считаете, как лучше всего тренироваться?
Давайте продолжим обсуждение в чате.
Пожалуйста, опубликуйте соответствующий код виртуальной машины