使用MVVM模式绑定嵌套控件

时间:2011-08-28 08:27:25

标签: silverlight data-binding mvvm

我遇到了使用我的MVVM模式绑定嵌套控件的问题。这是我的XAML代码:

 <ItemsControl Grid.Column="1" ItemsSource="{Binding NotificationContacts}">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <toolkit:Expander>
                        <toolkit:Expander.Header>
                            <Grid>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="Auto" />
                                    <ColumnDefinition Width="Auto" />
                                    <ColumnDefinition Width="Auto" />
                                </Grid.ColumnDefinitions>
                                <TextBlock Text="{Binding ContactName}" Grid.Column="0" VerticalAlignment="Center"></TextBlock>
                                <Image Source="Images/answer_ok.png" Grid.Column="1" Margin="15,0,15,0" Width="27" Height="27"></Image>
                            </Grid>
                        </toolkit:Expander.Header>
                        <toolkit:Expander.Content>
                            <ListBox Margin="30,10,0,10" ItemsSource="{Binding NotificationContacts.Messages">
                                <ListBox.ItemTemplate>
                                    <DataTemplate>
                                        <TextBlock Text="{Binding MessageName}"></TextBlock>
                                    </DataTemplate>
                                </ListBox.ItemTemplate>
                            </ListBox>
                        </toolkit:Expander.Content>
                    </toolkit:Expander>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>

问题是,位于ExpanderControl数据模板中的列表框控件没有数据绑定。 列表框控件由名为“Messages”的EntityCollection填充,该对象包含在ItemsControl与...数据绑定的父对象“NotificationContacts”中。

有谁知道如何解决这个问题?

提前致谢!!!

2 个答案:

答案 0 :(得分:1)

你试过这个:

<ItemsControl Grid.Column="1" ItemsSource="{Binding NotificationContacts}">
  ......
   <ListBox Margin="30,10,0,10" ItemsSource="{Binding Messages}">
  .....
       <TextBlock Text="{Binding MessageName}"></TextBlock>

如果我没记错,当你在“内部”ItemContol时,绑定上下文设置为NotificationContacts。所以只使用“{Binding Messages}”就可以了。

顺便说一下,你在线上缺少大括号:

<ListBox Margin="30,10,0,10" ItemsSource="{Binding NotificationContacts.Messages">

答案 1 :(得分:0)

Call ItemsControl f.i. “ic”并使用ListBox中的下一个绑定

<ItemsControl x:Name="ic" Grid.Column="1" ItemsSource="{Binding NotificationContacts}">
     ...
     <ListBox Margin="30,10,0,10" ItemsSource="{Binding ElementName=ic, Path=DataContext.Messages}">