Как я могу заполнить список как это данными - PullRequest
0 голосов
/ 27 мая 2019

Что такое код C #, чтобы заполнить эти listbox данными (строками)

Я видел это на 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 ]

3 голосов
/ 27 мая 2019

Чтобы сделать это, вам нужно узнать о шаблоне 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:

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>

И это должно хорошо работать:)

0 голосов
/ 27 мая 2019

У вас должно быть что-то вроде этого.

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}">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...