我有一个listview
<ListView Canvas.Left="1045" Canvas.Top="667" FontSize="25" ItemsSource="{Binding Items}" FontFamily="Gill Sans MT" Height="173" Name="lvContact" Width="536" SelectionChanged="lvContact_SelectionChanged">
在我的代码中,我动态地将一个项目添加到列表中
public void UpdateContactList(Hashtable contactList)
{
this.lvContact.Items.Clear();
SortedDictionary<string,string> sortedContactList = new SortedDictionary<string,string>();
foreach (DictionaryEntry de in contactList)
{
sortedContactList.Add(de.Key.ToString(), de.Value.ToString());
}
foreach (var de in sortedContactList)
{
System.Windows.Controls.ListViewItem contactItem = new System.Windows.Controls.ListViewItem();
string contactItemString = de.Key.ToString();
System.Windows.Controls.ListViewItem text = new System.Windows.Controls.ListViewItem();
text.Content = contactItemString;
if (de.Value == "NLN")
{
text.Background = Brushes.Green;
}
else
{
text.Background = Brushes.Gray;
}
lvContact.Items.Add(text);
}
}
然而,背景颜色永远不会改变,列表也不会更新。
任何想法为什么? 非常感谢
答案 0 :(得分:1)
ListView可以绑定到ItemsSource
,也可以手动指定ListView.Items
。你不能兼得。
您的ListView定义会绑定您的ListView.ItemsSource
,因此您无法手动指定ListView.Items
。
由于您的ItemsSource
已绑定到某个媒体资源Items
,因此我认为您的List<T>
或ObservableCollection<T>
位于名为Items
的{{1}}项目中你的ListView。要修改ListView的项目,您应该修改此集合。
要根据值更改背景颜色,我会使用DataTrigger。这将允许您保留ItemsSource bindnig,并将您的数据与UI分开。
<Style TargetType="{x:Type ListViewItem}">
<Setter Property="Background" Value="Gray" />
<Style.Triggers>
<DataTrigger Binding="{Binding Value}" Value="NLN">
<Setter Property="Background" Value="Green" />
</DataTriggers>
</Style.Triggers>
</Style>