Может ли кто-нибудь помочь мне написать привязки для этого фрагмента XAML Xamarin Forms в C#? - PullRequest
0 голосов
/ 14 апреля 2020
 <StackLayout x:Name="stck" BindableLayout.ItemsSource="{Binding Path=StreamIdCollection, Source={x:Static tokService:CrossOpenTok.Current}}">
        <BindableLayout.ItemTemplate>
            <DataTemplate>
                <tok:OpenTokSubscriberView HeightRequest="200" StreamId="{Binding .}"/>
            </DataTemplate>
        </BindableLayout.ItemTemplate>
    </StackLayout>

Это то, что я до сих пор пробовал в C#:

        dataTemplate = new DataTemplate(() =>
        {
            OpenTokSubscriberView subscriberView = new OpenTokSubscriberView
            {
                HeightRequest = 200,
                WidthRequest = w,
            };
            subscriberView.SetBinding(OpenTokSubscriberView.StreamIdProperty, new Binding() {Source = this });
            return subscriberView;
        });
        publisherView = new OpenTokPublisherView
        {
            WidthRequest = w,
            HeightRequest = 200
        };

        stackSubcriber = new StackLayout
        {
            Orientation = StackOrientation.Vertical,
            WidthRequest = w,
            HeightRequest = 400,
            BackgroundColor = Color.LightGray
        };


        stackSubcriber.SetBinding(BindableLayout.ItemsSourceProperty, new Binding() { Path = "StreamIdCollection",Source = CrossOpenTok.Current });
        BindableLayout.SetItemTemplate(stackSubcriber, dataTemplate);

Мне нужно понять, как писать выше XAML в C#? Мое полное приложение построено с C#, и поэтому я не хочу писать его на XAML.

1 Ответ

0 голосов
/ 14 апреля 2020

Единственное, что мне не хватает, это то, как ItemSource устанавливается в BindableLayout. Вы пробовали что-то вроде этого:

BindableLayout.SetItemsSource(stackSubcriber, StreamIdCollection);

Я знаю, что вы пытались добиться этого, используя следующую строку:

 stackSubcriber.SetBinding(BindableLayout.ItemsSourceProperty, new Binding() { Path = "StreamIdCollection",Source = CrossOpenTok.Current });

Но я не знаю, что это правильный способ сделать это. Пожалуйста, попробуйте вышеуказанное решение и посмотрите, что произойдет.

Более подробную информацию вы можете найти здесь: Документация BindableLayout

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