Здравствуйте, я хочу распаковать список комментариев (ICollection) и показать комментарии, используя привязку данных в c #. Как я могу получить доступ к каждому комментарию списка?

#c# #list #uwp

#c# #Список #uwp

Вопрос:

 <StackPanel Grid.Column="1">
        <ListView x:Name="lstvActiveIssues" ItemClick="lstvActiveIssues_ItemClick" IsItemClickEnabled="True" Height="500">
            <ListView.ItemTemplate>
                <DataTemplate x:DataType="models:Issue">
                    <StackPanel>

                        <StackPanel>
                            <StackPanel Orientation="Horizontal">
                                <TextBlock Text="Title:"   Width="130" FontSize="10"/>
                                <TextBlock Text="{x:Bind Title}" Margin="10 10 0 0" />
                            </StackPanel>
                        </StackPanel>

                        <StackPanel>
                            <StackPanel Orientation="Horizontal">
                                <TextBlock Text="Customer Name:"  Width="130" />
                                <TextBlock Text="{x:Bind Customer.FirstName}" Margin="10 5 0 0"  />
                                <TextBlock Text="{x:Bind Customer.LastName}" Margin="5 5 0 0"  />
                            </StackPanel>
                        </StackPanel>                            
                    </StackPanel>                        
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>

        <StackPanel DataContext="{Binding SelectedItem, ElementName=lstvActiveIssues}" >
            <TextBlock Text="Details of the selected Issue" />
            
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="Title:" Width="130" />
                <TextBlock Text="{Binding Title}" />
            </StackPanel>

            <StackPanel Orientation="Horizontal">
                <TextBlock Text="Customer Name:" Width="130" />
                <TextBlock Text="{Binding Customer.FirstName}" />
            </StackPanel>

            <StackPanel Orientation="Horizontal">
                <TextBlock Text="Comment:" Width="130" />
                <TextBlock Text="{Binding Comments}" />
            </StackPanel>
        </StackPanel>            
    </StackPanel>
  

Класс проблемы здесь

 public class Issue
{
    public Issue()
    {

    }

    public Issue(long id, long customerId, string title, string description, string status, DateTime created)
    {
        Id = id;
        CustomerId = customerId;
        Title = title;
        Description = description;
        Status = status;
        Created = created;
    }

    public long Id { get; set; }
    public long CustomerId { get; set; }
    public string Title { get; set; }
    public string Description { get; set; }
    public string Status { get; set; }
    public DateTime Created { get; set; }

    public virtual Customer Customer { get; set; }
    public virtual ICollection<Comment> Comments { get; set; }
}
  

текстовый блок показывает только систему.Коллекция.Generic.List’1[DataAccessLibrary.Модели.Комментарий]
Как я могу показать каждый комментарий в текстовом блоке.Я хочу распаковать список комментариев (ICollection) и показать комментарии, используя привязку данных в c #. Как я могу получить доступ к каждому комментарию списка?

Комментарии:

1. вы должны перебирать Comments и использовать одну панель, как клиент, для каждого комментария.

2. Я думаю, что вашему ListView нужен атрибут ItemsSource.

3. Я создал метод, который включает цикл foreach. цикл предоставляет каждый элемент из комментариев, но как я могу использовать метод в привязке, который я имею в виду: Text=»{Привязка комментариев? Метод}»

4. Я согласен с JH_Dev, причина вашей проблемы в том, что вы привязываете объект ICollection непосредственно к текстовому свойству текстового блока. Вы могли бы попробовать решение JH_Dev.

5. Спасибо, я должен протестировать обе альтернативы.

Ответ №1:

Я думаю, ваша проблема в том, что вы привязываете объект ICollection непосредственно к текстовому свойству вашего текстового блока.

Если вы просто хотите напрямую отображать значения в текстовом блоке, вы можете использовать конвертер значений для преобразования вашего списка комментариев в строку, которая будет отображаться в вашем текстовом блоке. Однако, исходя из вашего вопроса, я не думаю, что это ваш желаемый результат.

Мой совет — использовать другой listview для отображения комментариев, а не текстового блока. Итак, что-то вроде этого может быть тем, что вы ищете:

 <ListView x:Name="issueCommentsList" ItemSource="{Binding SelectedItem.Comments, ElementName=lstvActiveIssues}" IsItemClickEnabled="True" Height="500">
        <ListView.ItemTemplate>
            <DataTemplate x:DataType="models:Comment">
                <StackPanel>
                    <TextBlock Text="{Binding Text}" FontSize="10"/>                     
                </StackPanel>                        
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
  

Как вы можете видеть, что ItemSource listview будет иметь привязку данных к комментариям выбранных элементов. Затем это позволит вам создать пользовательский интерфейс для ваших комментариев.

Я только что добавил простой текстовый блок для пользовательского интерфейса комментариев, чтобы вы могли изменить его соответствующим образом

Надеюсь, это поможет, счастливого кодирования 🙂

Комментарии:

1. Спасибо JH_Dev

2. рад помочь @HosseinHosseini может принять мой ответ