Расширяемые элементы ListView - PullRequest
0 голосов
/ 21 ноября 2018

Я пытаюсь создать страницу новостей.Я пытаюсь сделать расширяемые элементы списка в ListView.

Итак, я пишу статью, и я даю ей название и текст.И когда текст длиннее 5 символов, текст должен быть обрезан до первых 5 символов, а затем вы должны прочитать что-то вроде «Нажмите меня, чтобы развернуть».И когда вы щелкнете по предмету, вы сможете прочитать полный текст.

Прямо сейчас я застрял.Я пытаюсь решить ее с помощью DataTemplateSelector, но DataTemplate и string стоят друг на друга, и я не могу понять, как ее решить.

xaml:

        <ListView x:Name="NewsList" HasUnevenRows="true">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <Frame BorderColor="Black">
                            <StackLayout>
                                <StackLayout>
                                    <Image HeightRequest="50" WidthRequest="50" Source="https://xamarin.com/content/images/pages/forms/example-app.png" />
                                </StackLayout>
                                <Label Text="{Binding Title}" />
                                <Label Text="{Binding Text}" />
                            </StackLayout>
                        </Frame>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>

cs:

public class NewsEntry
{
    public string Title { get; set; }
  //  public string Text { get; set; }

    public TestDTS tex { get; set; }
}

public class TestDTS : DataTemplateSelector
{
   // public DataTemplate titel { get; set; }
    public DataTemplate texd { get; set; }

    public DataTemplate texdCut 
    {
        get { return texd.ToString().Substring(0,5);} // cannot implicitly convert string to DataTemplate
    }

    protected override DataTemplate OnSelectTemplate(object item, BindableObject container)
    {
        return item.ToString().Length > 7 ? texdCut : texd;
    }
}

edit

Я нашел другой способ обойти это:

        MessagingCenter.Subscribe<WriteArticle, NewsEntry>(this, "Spiderman", (p, item) =>
        {
            var finishedNews = item as NewsEntry;
            if (finishedNews.TextFull.Length > 18)
            {
                finishedNews.Text = finishedNews.TextCut;
            }
            else finishedNews.Text = finishedNews.TextFull;
            newsEntries.Insert(0, finishedNews);
        });
//....
    public void NewsList_Selected(Object sender, SelectedItemChangedEventArgs e)
    {
        newsEntries[0].Text = newsEntries[0].TextFull;
        NewsList.ItemsSource = null;
        NewsList.ItemsSource = newsEntries;
    }
//....
public class NewsEntry
{
    public string Title { get; set; }
    public string Text { get; set; }

    public string TextFull { get; set; }
    public string TextCut 
    {
        get { return TextFull.Substring(0, 10) + " but wait. theres more"; }
    }
}

Но теперь мне интересно, знает ли кто-нибудь способкак обновить ListView?Я сделал это, установив ItemSource в null и вернувшись к newsEntries.Кажется, я не могу найти другой путь.

...