[英]Binding ObservableCollection to a listView programmatically
如何通过XAML将ObservableCollection绑定到ListView有很多问题。 我需要如何以编程方式将集合绑定到ListView。 有一些问题可以帮助您,但仍然不能完全满足我的需求。
我有这些课:
public class myTask
{
public DateTime TaskDate { get;}
public string TaskName { get;}
}
public class myTaskList : List<myTask>
{
public ObservableCollection<myTask> getMyTasks(DateTime d)
{
ObservableCollection<myTask> t = new ObservableCollection<myTask>
(this.Where(x => x.TaskDate == d).ToList<myTask>());
return t;
}
}
我只想在运行时将getMyTasks结果的TaskName绑定到列表视图。 我已经尝试过这种方法:
ListView lv = new ListView();
//assuming I declare myTaskList a static class
lv.DataContext = myTaskList.getMyTasks(DateTime.Now);
var binding = new Binding();
binding.Source = lv;
lv.SetBinding(ListView.ItemsSourceProperty, binding);
那可能只将结果绑定到列表,我如何只在结果中绑定TaskName?
没有一个很好的最小,完整和可验证的示例清楚地说明您的问题,就不可能确定知道您需要什么答案。 但…
似乎根本没有绑定操作。 您显示的绑定代码创建一个循环绑定(将ListView
对象的ItemsSource
属性绑定到自身),这似乎没有用。 更重要的是,只需分配ItemsSource
属性和DisplayMemberPath
属性,您应该就能完成所需的工作:
lv.ItemsSource = myTaskList.getMyTasks(DateTime.Now);
lv.DisplayMemberPath = "TaskName";
完全不需要创建绑定。
我想我终于找到了适用于我的方案的解决方案。
可以将多个字段的ObservableCollection数据集的字段绑定到列表视图。 我们需要做的是在资源中声明一个数据模板:
<DataTemplate x:Key='myTaskItemTemplate'>
<TextBlock x:Name='ItemTaskName'
FontSize='15'
HorizontalAlignment='Stretch'
VerticalAlignment='Stretch'
TextAlignment='Center'
Text='{Binding TaskName}' />
</DataTemplate>
然后使用上面的模板创建listview
ListView lv = new ListView { ItemTemplate = (DataTemplate)Resources["myTaskItemTemplate"] };
然后创建一个绑定,其源是绑定到listview的ItemSourceProperty的ObservableCollection数据集
var t = myCalendarMonth.TaskList(d.theDate);
lv.DataContext = t;
var binding = new Binding();
binding.Source = t;
lv.SetBinding(ListView.ItemsSourceProperty, binding);
我肯定会有更好的解决方案,因为我对XAML还是很陌生,但是讨论的方法似乎可以产生我想要的结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.