2010-08-25 2 views
0

Я разрабатываю приложение Windows Phome. У меня есть следующая ListBox на странице:ListBox ItemsSource Binding не работает

<ListBox Margin="10,10,8,8" x:Name="WallList"> 
    <ListBox.ItemsPanel> 
    <ItemsPanelTemplate> 
     <StackPanel /> 
    </ItemsPanelTemplate> 
    </ListBox.ItemsPanel> 
    <ListBox.ItemTemplate> 
    <DataTemplate> 
     <Grid x:Name="ListBoxItemLayout" Background="Transparent" Margin="10"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="0.33*"/> 
      <ColumnDefinition Width="0.77*"/> 
     </Grid.ColumnDefinitions> 
     <Image HorizontalAlignment="Left" Margin="0" Source="{Binding ImagePath}" Height="200"/> 
     <StackPanel Margin="5,0,0,0" Grid.Column="1"> 
      <TextBlock x:Name="Name" TextWrapping="Wrap" Text="{Binding Name}" Style="{StaticResource PhoneTextTitle2Style}"/> 
      <TextBlock x:Name="Comment" Margin="0,5,0,0" TextWrapping="Wrap" Text="{Binding Comment}" Style="{StaticResource PhoneTextNormalStyle}" Height="130"/> 
      <TextBlock x:Name="When" TextWrapping="Wrap" Text="{Binding When}" Style="{StaticResource PhoneTextTitle3Style}" VerticalAlignment="Bottom"/> 
     </StackPanel> 
     </Grid> 
    </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

Я использую это, чтобы заполнить ListBox на нагруженном событии:

this.WallList.ItemsSource = StartingWall.GetWallPosts(); 

А теперь я хочу, чтобы добавить больше элементов программны, когда пользователь записать некоторый текст в текстовом поле и нажмите кнопку. Я хочу разместить этот текст в поле «Комментарий».

Я собираюсь заполнить остальные поля данными по умолчанию.

Мой вопрос:

Как я могу добавить больше деталей к WallList ListBox?

Кто-то предложил сделать следующее:

public ObservableCollection<WallPostEntry> MyWallPosts {get;set;} 

// Initialize MyWallPosts to whatever 

MyWallPosts.Add(new WallPostEntry("new entry")); 

<ListBox Margin="10,10,8,8" x:Name="WallList" ItemsSource="{Binding MyWallPosts}"> 

Но Binding ListBox ItemsSource не работает для меня. Я инициализацией MyWallPosts на конструктор, перед InitializeComponent();, как это:

public Wall() 
{ 
    MyWallPosts = StartingWall.GetWallPosts(); 
    InitializeComponent(); 
} 

Любые советы?

Спасибо.

ответ

3

Я вижу несколько странные вещи:

во-первых, вы используете ItemsSource связывания в одном месте, но явно установить его в другом? что-то в коде переопределит/отменит любые привязки, так что это может вызвать проблему (но похоже, что вы устанавливаете его на одно и то же, чтобы это не имело значения, но я бы удалил this.WallList. ItemsSource = StartingWall.GetWallPosts(); полностью вызовите и оставьте ItemSource = "{Binding MyWallPosts}" в xaml. Точка использования привязок - это избавиться от этого типа кода)

second, you're установка mywallposts и использование привязки, но не установка datacontext на ваш объект? Простейшие в вашем примере будут просто добавить одну строки в конструктор:

public Wall() 
{ 
    DataContext = this; 
    MyWallPosts = StartingWall.GetWallPosts(); 
    InitializeComponent(); 
} 

Мое следующее предложение было бы упростить, пока он работает. оставить ListBox, но закомментировать все шаблоны элемента/данных, чтобы убедиться, что у вас нет ошибки в шаблоне

0

Может он просто добавить свойство DataContext к этому:

<ListBox Margin="10,10,8,8" x:Name="WallList" ItemsSource="{Binding MyWallPosts}"> 

так :

<ListBox Margin="10,10,8,8" x:Name="WallList" ItemsSource="{Binding MyWallPosts}" DataContext="{Binding MyWallPosts}"> 

Можно ли каким-либо образом установить dataContext декларативно? ОКСАР

Смежные вопросы