如何用数据填充这样的列表框

时间:2019-05-27 09:21:57

标签: c# wpf listbox

用数据(字符串)填充这些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>

2 个答案:

答案 0 :(得分:2)

为此,您将需要了解MVVM模式。 首先,您需要在模型中的TODO类具有TaskName,Description和Priority的属性。

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

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

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>

它应该能很好地工作:)

答案 1 :(得分:0)

您应该有这样的东西。

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

将Binding表达式修改为:

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