Привязка метки ListView к свойству - PullRequest
0 голосов
/ 14 мая 2018
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         xmlns:viewModels="clr-namespace:TestApp.ViewModels"
         x:Class="TestApp.Views.MasterPage"
         Title="This is the title">
    <StackLayout>
        <ListView x:Name="listView">
            <ListView.ItemsSource>
                <x:Array Type="{x:Type viewModels:MasterPageItem}">
                    <viewModels:MasterPageItem Title="{Binding Item1}"/>
                    <viewModels:MasterPageItem Title="{Binding Item2}"/>
                </x:Array>
            </ListView.ItemsSource>
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <Grid>
                            <Label Text="{Binding Title}" VerticalTextAlignment="End"/>
                        </Grid>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </StackLayout>
</ContentPage>

Таким образом, я получаю ошибку сборки: «Не найдено ни свойства, ни привязываемого свойства, ни события для« Заголовка », или не совпадает тип между значением и свойством». Я пытаюсь связать свойство MasterPageItem Title со значением в моем представлении (это делается для того, чтобы я мог переводить значения во время выполнения с помощью выбора нужного языка). Item1 и Item2 - это свойства, которые находятся в представлении MasterPage, а Title - в MasterPageItem. Метка в ListView привязывается к свойству MasterPageItem Title.

Я не совсем уверен, что именно я делаю здесь неправильно, поэтому любая помощь будет признательна.

1 Ответ

0 голосов
/ 14 мая 2018

Если это MasterPageItem относится к классу, который обычно создается для обработки выбора меню при добавлении MasterDetailPage в ваш проект, он действительно не имеет BindableProperty.

Это модель по умолчанию, которую мы используем:

public class MainPageMenuItem
{
    public MainPageMenuItem()
    {
        TargetType = typeof(MainPageDetail);
    }
    public int Id { get; set; }
    public string Title { get; set; }

    public Type TargetType { get; set; }
}

Если вы хотите использовать связывание, вам нужно сделать этот класс BindableObject, а затем изменить его свойство на привязываемое.

Как это:

public class MainPageMenuItem : BindableObject
{
    public MainPageMenuItem()
    {
        TargetType = typeof(MainPageDetail);
    }

    public readonly static BindableProperty IdProperty = BindableProperty.Create(nameof(Id), typeof(int), typeof(MainPageMenuItem));
    public int Id
    {
        get { return (int)GetValue(IdProperty); }
        set { SetValue(IdProperty, value); }
    }

    public readonly static BindableProperty TitleProperty = BindableProperty.Create(nameof(Title), typeof(string), typeof(MainPageMenuItem));
    public string Title
    {
        get { return (string)GetValue(TitleProperty); }
        set { SetValue(TitleProperty, value); }
    }

    public readonly static BindableProperty TargetTypeProperty = BindableProperty.Create(nameof(TargetType), typeof(Type), typeof(MainPageMenuItem));
    public Type TargetType
    {
        get { return (Type)GetValue(TargetTypeProperty); }
        set { SetValue(TargetTypeProperty, value); }
    }
}

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...