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