Не удалось установить свойство для ListBox ItemsSource

#wpf #silverlight #windows-phone-7

#wpf #silverlight #windows-phone-7

Вопрос:

 List<Post>[] Postok;

public List<Post>[] MyProperty
{
    get { return Postok; } 
    set { Postok = value; } 
}

[DataContract]
public class Post
{
    [DataMember]
    public string _imageSourc { get; set; }
    [DataMember]
    public string _author { get; set; }
    [DataMember]
    public string _maintext { get; set; }
    [DataMember]
    public string _altext { get; set; }
    [DataMember]
    public string _href { get; set; }
}

<ListBox x:Name="sdemotivalo" ItemsSource="{Binding MyProperty[0]}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Path=_imageSourc}" />
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>
  

Я хочу установить MyProperty [0] для ListBox. Но это ничего не показывает. Я искал ответ на эту проблему, но я его не нашел. Если вы знаете, пожалуйста, помогите мне.

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

1. Почему вы используете массив списков (=список списков)? Я думаю, вам нужен только список … удалить []

Ответ №1:

Вам нужно установить DataContext для вашего элемента управления или формы. Скорее всего, вы бы сделали это в корневом каталоге следующим образом:

 <Grid x:Name="LayoutRoot" DataContext="{Binding MyClass}">
  

Предполагается, что это MyProperty принадлежит экземпляру класса с именем MyClass . Затем вы можете получить доступ к элементам MyClass , включая MyProperty . Затем вы бы установили ItemsSource для своего ListBox примерно так:

 <ListBox x:Name="sdemotivalo" ItemsSource="{Binding MyProperty[0]}" >
  

В первой строке выше указано, что ваша форма должна просмотреть MyClass , чтобы получить ее данные. Таким образом, когда вы говорите ItemsSource="{Binding MyProperty[0]}" , вы говорите: «посмотрите на экземпляр класса, к которому вы привязаны ( MyClass ), и найдите свойство с именем MyProperty «, после чего вы можете проиндексировать в MyProperty и получить то, что вы хотите.

Мне любопытно, почему вы используете массив List<T> — я не уверен, что когда-либо видел это.

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

1. <ListBox x:Name=»sdemotivalo» ItemsSource=»{Привязка MyProperty[0]}»> <ListBox. ItemTemplate> <DataTemplate> <TextBlock Text=»{Путь привязки=_imagesource}» /> </DataTemplate> </ListBox. ItemTemplate> </ListBox> Все в порядке? ‘потому что в listbox ничего не отображается

2. Как вы настраиваете свой DataContext ?

3. <Сетка x:Name=»LayoutRoot» Background=»Прозрачный» DataContext=»{Основная страница привязки}»>

4. Не пытайтесь напрямую привязываться к вашему xaml.cs файлу. Создайте какой-нибудь класс для хранения MyProperty и создайте экземпляр этого класса для использования в качестве вашего DataContext .

Ответ №2:

Имя общедоступного свойства — MyProperty, и вы привязываетесь к ListProp. Опубликуйте код, в котором вы инициализируете Postok и присваиваете значения.