我一直试图找出将类的ObservableCollection绑定到带有TextBox DataTemplate的ListBox的正确方法。我试图在WPF binding: Set Listbox Item text color based on property中实现代码,但是到目前为止还没有让我走得太远。我是WPF DataBinding的新手,在最简单的情况下,最多以编程方式设置ItemsSource。
我有这个班级
public class item
{
public string guid;
public bool found;
public bool newItem;
public Brush color;
}
和以下ObservableCollection
public ObservableCollection<item> _items;
public Window()
{
InitializeComponent();
_items = new ObservableCollection<item>();
}
在代码的其他地方,我通过
将项目添加到集合中_items.Add(new item() { guid = sdr.GetString(0), found = false, newItem = false, color = Brushes.Red });
这是ListBox的简化XAML
<ListBox x:Name="ListBox_Items">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text=GUID_HERE Foreground=COLOR_HERE/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
我已经尝试了几种不同的方法来使其正常工作,但是对于它们都没有,ListBox正在更新。有人能帮我指出正确的方向吗?
答案 0 :(得分:0)
我认为您忘了将ListBox绑定到集合本身。
您的XAML应如下所示:
<ListBox x:Name="ListBox_Items" ItemsSource="{Binding _items}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text=GUID_HERE Foreground=COLOR_HERE/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
如果您想要更改集合中项目的属性(并且更改显示在UI上),您应该在&#34; item&#34;中实现INotifyPropertyChanged(请参阅MSDN)界面中的更多内容。类。
答案 1 :(得分:0)
四件事:
您的item类需要使用公共属性:
public class item
{
public string guid { get; set; }
public bool found { get; set; }
public bool newItem { get; set; }
public Brush color { get; set; }
}
您需要将ItemsSource
设置为集合,并设置当前DataContext
public Window()
{
InitializeComponent();
DataContext = this;
_items = new ObservableCollection<item>();
ListBox_Items.ItemsSource = _items;
}
您需要更新DataTemplate
以使用POCO的属性名称
<ListBox x:Name="ListBox_Items">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding guid}" Foreground="{Binding color}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>