Silverlight — привязка listbox к шаблону listbox

#silverlight #xaml #binding #listbox

#silverlight #xaml #привязка #listbox

Вопрос:

В silverlight я пытаюсь создать listbox отчетов и пытаюсь отобразить параметры отчета в listbox в datatemplate внешнего списка отчетов.

Вот классы данных:

 public class Report
{
    public string Title { get; set; }
    public string Description  { get; set; }
    public List<ReportParameter> Parameters = new List<ReportParameter>();
}

public class ReportParameter
{
    public string Name { get; set; }
    public string ParameterType { get; set; }
    public bool Required { get; set; }
}
  

Вот XAML, который я пытаюсь использовать для этого:

 <ListBox x:Name="lstReports">            
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Border>
                    <StackPanel>
                        <TextBlock Text="{Binding Title}"/>                            
                        <ListBox ItemsSource="{Binding Parameters}"  Height="60" Width="60">
                            <ListBox.ItemTemplate>
                                <DataTemplate>
                                    <TextBlock Text="{Binding Name}"/>
                                </DataTemplate>
                            </ListBox.ItemTemplate>                                 
                        </ListBox>
                    </StackPanel>
                </Border>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
  

Привязка к заголовку отчета работает, но внутреннее поле списка пусто для каждого из отчетов.

Список параметров заполнен.

Что я делаю не так?

Спасибо!

Ответ №1:

Ваш список «Параметры» является общедоступным полем, не является свойством, silverlight может привязываться только к свойствам, а не к полям. Попробуйте изменить свой класс на этот:

 public class Report
{
    public Report()
    {
         Parameters = new List<ReportParameter>();
    }

    public string Title { get; set; }
    public string Description  { get; set; }
    public List<ReportParameter> Parameters { get; set; }
}
  

Это должно работать так, как вы этого хотите.

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

1. Спасибо, Viggity! Сработало как по волшебству!