Попытка передать данные в View (содержит ListView) и установить его в качестве содержимого - PullRequest
0 голосов
/ 10 марта 2020

У меня есть список строк на моей главной странице, который я хочу передать другому представлению. Атрибут, которому я пишу, имеет привязку. По сути, это ItemSource объекта ListView.

Я дополнительно попытался использовать List, как string [], так и ObservableCollection в качестве хранилища данных для проектов, поскольку документация рекомендует использовать его.

Попытка использовать -element из MyView.xaml в MainPage.xaml работает как шарм.

MainPage.xaml:

Content = new MyView { Projects = MyProjects };

MyView. xaml.cs:

public partial class MyView : ContentView
{
    private List<string> _projects;
    public List<string> Projects
    {
        get => _projects; 
        set
        {
            _projects = value;
            OnPropertyChanged(nameof(Projects));
        }
    }
    //public string[] Test = new string[] { "Test", "Hallo", "Welt" };
    public MyView ()
    {
        InitializeComponent();
    }
}

MyView.xaml:

<StackLayout>
        <ListView BackgroundColor="Red" x:Name="p_lstView" RowHeight="160" SeparatorColor="DodgerBlue" ItemsSource="{Binding Projects}">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                    <Label Text="{Binding}"></Label>

                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>

        </ListView>
</StackLayout>

Ответы [ 2 ]

1 голос
/ 10 марта 2020

У вас есть некоторые проблемы с BindingContext на ListView.ItemSource. Текущий контекст находится на главной странице.

Вам необходимо изменить:

<ListView BackgroundColor="Red" x:Name="p_lstView" RowHeight="160" SeparatorColor="DodgerBlue" ItemsSource="{Binding Content.Projects}">

Альтернативно, вы можете установить BindingContext в MyView constrctor.

1 голос
/ 10 марта 2020

Вы должны установить BindingContext, тогда привязка будет работать:

public MyView()
{
    InitializeComponent();

    BindingContext = this;
}
...