#c# #data-binding #xamarin.forms
#c# #привязка данных #xamarin.forms
Вопрос:
У меня есть страница содержимого, которая привязана к модели представления.
В модели представления я создаю новый адрес и передаю ему некоторые данные
Address = new Address
{
UserId = Guid.NewGuid(),
PrimaryAddress = true,
Postcode = "G23 5HU",
Street = "Smith Street",
City = "Large City",
PhoneNumber = "115151"
};
У меня также есть элемент управления AddressInfo на странице содержимого следующим образом
<controls:AddressInfo Address="{Binding Address}"></controls:AddressInfo>
Вот элемент управления, который он сам
public partial class AddressInfo : ContentView
{
public static readonly BindableProperty AddressProperty =
BindableProperty.Create(nameof(Address), typeof(Address), typeof(AddressInfo), null);
public Address Address
{
get { return (Address)GetValue(AddressProperty); }
set { SetValue(AddressProperty, value); }
}
public AddressInfo()
{
InitializeComponent();
Street.SetBinding(Label.TextProperty, new Binding(nameof(Address.Street), source: this));
City.SetBinding(Label.TextProperty, new Binding(nameof(Address), source: this));
PhoneNumber.SetBinding(Label.TextProperty, new Binding(nameof(Address), source: this));
PostCode.SetBinding(Label.TextProperty, new Binding(nameof(Address), source: this));
}
Вот элемент управления XAML
<ContentView xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="TyreKlicker.XF.Core.Controls.AddressInfo">
<ContentView.Content>
<StackLayout>
<Label
x:Name="Street"
Text="{Binding Address.Street}" />
<Label
x:Name="City"
Text="{Binding Address.City}" />
<Label Text="Hardcoded Text" ></Label>
<Label
x:Name="PostCode"
Text="{Binding Address.Postcode}" />
<Label
x:Name="PhoneNumber"
Text="{Binding Address.PhoneNumber}" />
<Label x:Name="CardHeader"
Text="{Binding Header}"
TextColor="{StaticResource PrimaryDark}"
FontSize="Large" Margin="10,0,0,0" />
<Button Clicked="Button_OnClicked"></Button>
</StackLayout>
</ContentView.Content>
Когда я запускаю его, я ожидаю увидеть свойства адреса, но вместо этого все пустые, кроме жестко закодированного текста
Я добавил кнопку к элементу управления, чтобы помочь в отладке, если я остановлю событие Button_OnClicked, я смогу увидеть свойства адреса, и он содержит правильные данные, но он просто не отображается в списке, что я делаю не так?
Комментарии:
1. во-первых, вы устанавливаете привязку как в XAML, так и в коде. Выберите один или другой. Во-вторых, в коде вы непоследовательно задаете путь привязки
Ответ №1:
Благодаря подсказкам от Jason я удалил следующие строки из конструктора AddressInfo, и это сработало
//Street.SetBinding(Label.TextProperty, new Binding(nameof(Address.Street), source: this));
//City.SetBinding(Label.TextProperty, new Binding(nameof(Address), source: this));
//PhoneNumber.SetBinding(Label.TextProperty, new Binding(nameof(Address), source: this));
//PostCode.SetBinding(Label.TextProperty, new Binding(nameof(Address), source: this));
Спасибо за помощь!