我真的需要你的帮助,因为我无法找到解决问题的方法!
我正在开发通用Windows 10应用并且其中包含时间表(ListView)。
现在我想在当前正在运行的时间表中标记该项目。例如,有一个项目从星期一07:00到13:00,现在是星期一12:00,所以该项目应该将其颜色更改为红色(或其他东西),就像它被标记一样。
我现在已经尝试了几件事,而且到目前为止这是代码:
首先是我的ListView的xaml-Code:
<RelativePanel Name="rpStundenplan">
<ListView x:Name="lstViewStundenplan" HorizontalContentAlignment="Stretch" SelectionChanged="lstViewStundenplan_SelectionChanged">
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<RelativePanel Grid.Row="0" Grid.Column="0">
<RelativePanel Name="rpTag" Width="100">
<TextBlock Name="txtTag" FontSize="16" Text="{Binding Tag_lang}" TextWrapping="Wrap" RelativePanel.AlignHorizontalCenterWithPanel="True" />
</RelativePanel>
<RelativePanel Name="rpZeit" Width="auto" RelativePanel.Below="rpTag" RelativePanel.AlignHorizontalCenterWith="rpTag">
<TextBlock Name="txtZeitVon" FontSize="14" Text="{Binding Beginn}" VerticalAlignment="Center"/>
<TextBlock Name="txtZeitBis" FontSize="14" Text="{Binding Ende}" VerticalAlignment="Center" RelativePanel.RightOf="txtZeitVon" Margin="5,0,0,0" />
</RelativePanel>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</RelativePanel>
我使用以下代码填充ListView:
private void StundenplanAktualisieren()
{
//Studiengänge aus integrierter Datenbank in ListView eintragen
using (SQLite.Net.SQLiteConnection connIntern = new SQLite.Net.SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), sPathdatabaseIntern))
{
var query = connIntern.Table<Classes.Stundenplan>();
//ListBox erste leeren
this.lstViewStundenplan.Items.Clear();
foreach (var item in query)
{
this.lstViewStundenplan.Items.Add(item);
}
}
}
现在出现错误的代码:
public void AktuelleZeit()
{
//markiert die aktive Vorlesung
ListView lstView = new ListView();
lstView = lstViewStundenplan;
for (int i = 1; i < lstView.Items.Count; i++)
{
ListViewItem Item = (ListViewItem)lstViewStundenplan.Items[i];
Item.Foreground = new SolidColorBrush(Windows.UI.Colors.Red);
}
}
不幸的是行
ListViewItem Item = (ListViewItem)lstViewStundenplan.Items[i];
抛出了这个例子:
{&#34;无法投射类型&#39; CampusAppHSHof.Classes.Stundenplan&#39;键入&#39; Windows.UI.Xaml.Controls.ListViewItem&#39;。&#34;}
我希望代码足以让你重现问题......我试着让它尽可能短......
答案 0 :(得分:0)
通常我们不直接操作ListView的项目,常见的方法是将项目添加到ObservableCollection
并设置ListView的ItemSource属性以绑定到ObservableCollection
。
根据问题,lstViewStundenplan.Items
获取用于生成ListView
内容的集合。在您的项目中,集合中的项目为Stundenplan
类型。所以你得到了这个例子:
{“无法将'CampusAppHSHof.Classes.Stundenplan'类型的对象强制转换为'Windows.UI.Xaml.Controls.ListViewItem'。”}
您可以使用ItemsControl.ContainerFromItem
获取与指定项目对应的容器。您可以将其强制转换为ListViewItem
类型。
顺便说一下,在AktuelleZeit
方法中代码ListView lstView = new ListView(); lstView = lstViewStundenplan;
semms是多余的。
例如:
public void AktuelleZeit()
{
for (int i = 1; i < lstViewStundenplan.Items.Count; i++)
{
ListViewItem Item = (lstViewStundenplan).ContainerFromItem(lstViewStundenplan.Items[i]) as ListViewItem;
Item.Foreground = new SolidColorBrush(Windows.UI.Colors.Red);
}
}