Расширяемые элементы ListView

Я пытаюсь сделать страницу новостей. Я пытаюсь сделать расширяемые элементы списка в 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;
    }
}

редактировать

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

        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. Я не могу найти другой путь.

0 ответов

Другие вопросы по тегам