【问题标题】:WPF/C# - ListBox example whats the ItemsSourceWPF/C# - ListBox 示例什么是 ItemsSource
【发布时间】:2012-04-25 07:56:33
【问题描述】:

我想了解msdn的例子 (http://msdn.microsoft.com/en-us/library/ms742521.aspx#defining_simple_datatemplate)。

XAML 代码:

<ListBox Width="400" Margin="10" ItemsSource="{Binding Source={StaticResource MyTodoList}}">
   <ListBox.ItemTemplate>
     <DataTemplate>
       <StackPanel>
         <TextBlock Text="{Binding Path=TaskName}" />
         <TextBlock Text="{Binding Path=Description}"/>
         <TextBlock Text="{Binding Path=Priority}"/>
       </StackPanel>
     </DataTemplate>
   </ListBox.ItemTemplate>
 </ListBox>

文本块中的数据是对象的属性,对吗? 对象在代码隐藏文件中的 List (?) myTodoList 中?

protected ObservableCollection<TODO> _myTodoList= new ObservableCollection<TODO>();
public ObservableCollection<TODO> MyTodoList
{
    get { return _myTodoList; }
}

添加待办事项

TODO t1 = new TODO();
t1.TaskName = "TaskName1";
t1.Description = "Description1";
t1.Priority = "Priority1";
_myTodoList.Add(t1);

TODO t2 = new TODO();
t2.TaskName = "TaskName2";
t2.Description = "Description2";
t2.Priority = "Priority2";
_myTodoList.Add(t2);

我的测试 TODO 类:

public class TODO
{
    public string TaskName { get; set; }
    public string Description { get; set; }
    public string Priority { get; set; }
}

但是代码抛出异常...

怎么了?

【问题讨论】:

    标签: c# wpf listbox msdn


    【解决方案1】:

    你必须声明静态资源:

    <Window ...
            xmlns:local="clr-namespace:SDKSample"
            ...
            >
        <Window.Resources>
            <local:Tasks x:Key="MyTodoList"/>
        </Window.Resources>
    

    来自 SDKSample:

    public class Tasks : ObservableCollection<Task>
    {
        public Tasks(): base()
        {
            Add(new Task("Groceries", "Pick up Groceries and Detergent", 2, TaskType.Home));
            Add(new Task("Laundry", "Do my Laundry", 2, TaskType.Home));
            Add(new Task("Email", "Email clients", 1, TaskType.Work));
            Add(new Task("Clean", "Clean my office", 3, TaskType.Work));
            Add(new Task("Dinner", "Get ready for family reunion", 1, TaskType.Home));
            Add(new Task("Proposals", "Review new budget proposals", 2, TaskType.Work));
        }
    }
    

    【讨论】:

    • 什么是任务()?`
    • MSDN 的示例中,它是包含您的任务对象的列表。
    • 查看我的编辑并看看这个sample project
    • &lt;local:Tasks x:Key="MyTodoList"/&gt; 为什么我要在这里输入类名?有没有办法在这里指定方法?
    • 这就是 Jeetendra.Sharma 在他的回答中所建议的。有关示例,请参见 ObjectDataProvider.MethodName
    【解决方案2】:

    在您的代码隐藏文件中,在构造函数中输入以下内容:

    this.DataContext = this.MyTodoList;
    

    然后更改您的列表框:

    <ListBox Width="400" Margin="10" ItemsSource="{Binding}">
    

    【讨论】:

      【解决方案3】:

      你已经在这个顶部定义了数据上下文

      <ObjectDataProvider ObjectType="{x:Type m:yourvmtype}" x:Key="MyTodoList" MethodName="GetStrings"/> </StackPanel.Resources>

      【讨论】:

        猜你喜欢
        • 2011-07-13
        • 1970-01-01
        • 2014-08-16
        • 2010-11-29
        • 2010-11-03
        • 1970-01-01
        • 1970-01-01
        • 2012-01-09
        • 1970-01-01
        相关资源
        最近更新 更多