问题
I'm following msdn data templating overview http://msdn.microsoft.com/en-us/library/ms742521.aspx
But I felt they missed explaining something..for resources they have:
<Window.Resources><local:Tasks x:Key="myTodoList"/></Window.Resources>
And all they have in XAML is
<ListBox Width="400" Margin="10"
ItemsSource="{Binding Source={StaticResource myTodoList}}"/>
Without showing how C# code behind, they were able to show a list of items in the ListBox. The ListBox has no x:Name and I can't add the items in MainWindow, and with a separate class Tasks, I did the following (which doesn't work)
using System.Collections; // use ArrayList
using System.Collections.ObjectModel; // use Observable Collection
namespace FooApplication1
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
public class Tasks : ObservableCollection<Tasks>
{
string TaskName;
string Description;
int Priority;
public TasksStuff(string taskName, string description, int priority)
{
this.taskName = TaskName;
this.description = Description;
this.priority = Priority;
}
public string TaskName
{get{return this.taskName}}
public string Description
{get{return this.description}}
public string Priority
{get{return this.priority}}
private ArrayList Tasks
{
ArrayList taskList = new ArrayList();
taskList.Add( new TasksStuff("A foo task", "doing foo",1));
return taskList;
}
}
}
I am really confused.
回答1:
This should be the definition of Tasks
for your sample to work correctly:
public class Tasks : ObservableCollection<Task /*or whatever type you want to use here*/>
{
//...
}
--EDIT--
// This is a class to store information for a single task
// It has nothing to do with a collection of tasks
public class Task
{
private String _taskName;
public String TaskName
{
get { return _taskName; }
set { _taskName = value; }
}
private String _description;
public String Description
{
get { return _description; }
set { _description = value; }
}
private Int32 _priority;
public Int32 Priority
{
get { return _priority; }
set { _priority = value; }
}
public Task(String taskName, String description, Int32 priority)
{
this.TaskName = taskName;
this.Description = description;
this.Priority = priority;
}
}
// This is a class that is a collection of Task types
// Since it inherits from ObservableCollection, it is itself a collection
// There is no need to declare/create an ArrayList inside.
// And on a strict note, do not ever use ArrayList. It is obsolete and not strongly typed.
// Use List<T>, ObservableCollection<T>, etc. instead.
// Look for more Generic Collections in System.Collections.Generic namespace
public class Tasks : ObservableCollection<Task>
{
public Tasks()
{
Add(new Task("A foo task", "doing foo", 1));
}
}
来源:https://stackoverflow.com/questions/4451171/msdn-data-templating-overview