【问题标题】:How can I fill a listbox like this with data如何用数据填充这样的列表框
【发布时间】:2019-05-27 09:21:56
【问题描述】:

用数据(字符串)填充这些listbox的c#代码是什么

我在https://docs.microsoft.com/en-us/dotnet/framework/wpf/data/data-templating-overview看到这个

但是没有 C# 代码。

我想要一个listbox,就像链接上的“定义一个简单的数据模板”一样 https://docs.microsoft.com/en-us/dotnet/framework/wpf/data/data-templating-overview

图片来自列表框[1]:https://i.stack.imgur.com/K4HZS.png

<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>

【问题讨论】:

    标签: c# wpf listbox


    【解决方案1】:

    为此,您需要了解 MVVM 模式。 首先,您需要模型中的 TODO 类,其中包含 TaskName、Description 和 Priority 属性。

    public class Todo
    {
        public string TaskName { get; set; }
        public string Description { get; set; }
        public int Priority { get; set; }
    }
    

    然后,您将需要一个类来存储 TODO 的集合,即您在 xaml 中的“myTodoList”:

    public class TodoViewModel
    {
        public ObservableCollection<Todo> TodoList { get; } = new ObservableCollection<Todo>();
    
        public TodoViewModel()
        {
            TodoList.Add(new Todo { TaskName = "Todo1", Description = "Todo 1 Description", Priority = 1 });
            TodoList.Add(new Todo { TaskName = "Todo2", Description = "Todo 2 Description", Priority = 2 });
        }
    }
    

    然后,您需要在 xaml 后面的代码中设置 datacontext :

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            this.DataContext = new TodoViewModel();
            InitializeComponent();
        }
    }
    

    最后,这是你的 XAML(我稍微改了一下,你不需要像 "Path=" 之类的东西):

    <ListBox Width="400" Margin="10" ItemsSource="{Binding TodoList}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{Binding TaskName}" />
                        <TextBlock Text="{Binding Description}"/>
                        <TextBlock Text="{Binding Priority}"/>
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
    </ListBox>
    

    它应该运作良好:)

    【讨论】:

    • 对于“你不需要像 "Path="" 这样的东西 - 编写它并没有什么坏处,尤其是当你是 WPF 新手时,它会更清楚.
    【解决方案2】:

    你应该有这样的东西。

    MainWindow.xaml.cs:

    public List<ToDo> ToDoList {get; set;}
    
    public MainWindow()
    {
        InitializeComponent();
        DataContext=this;
        ToDoList= new List<ToDo>()
            {
                new ToDo{TaskName="Task1",Description="First Task"},
                new ToDo{TaskName="Task2",Description="Second Task"}
            };
    }
    

    ToDo.cs:

    public class ToDo
    {
        public string TaskName {get; set;}
        public string Description {get; set;}
    }
    

    将绑定表达式修改为:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-07
      • 1970-01-01
      • 2022-11-13
      相关资源
      最近更新 更多