从2个表中绑定一个列表框

时间:2012-03-03 16:57:56

标签: linq windows-phone-7 xaml

我正在尝试绑定2个表中的列表框。这两个表是相关的。

(windows phone project)

XAML:

<ListBox Name="LstOrders" ItemsSource="{Binding}" Margin="12,11,12,12" toolkit:TiltEffect.IsTiltEnabled="True" Height="643">
<ListBox.ItemTemplate>

    <DataTemplate>
                                    <StackPanel Margin="0">
                                        <TextBlock Text="{Binding refe}"
                                           Tag="{Binding idOrder}"
                                           Margin="0,0,0,0"
                                           FontSize="{StaticResource PhoneFontSizeExtraLarge}" 
                                           FontFamily="{StaticResource PhoneFontFamilySemiLight}"/>
                                        <TextBlock Text="{Binding tipo}"
                                           Margin="0,0,0,0"
                                           Foreground="{StaticResource PhoneSubtleBrush}"
                                           FontSize="{StaticResource PhoneFontSizeNormal}"/>
                                        <TextBlock Text="{Binding country}"
                                           Margin="0,0,0,0"
                                           Foreground="{StaticResource PhoneSubtleBrush}"
                                           FontSize="{StaticResource PhoneFontSizeNormal}"
                                           FontFamily="{StaticResource PhoneFontFamilySemiBold}" />
                                    </StackPanel>
                                </DataTemplate>
 </ListBox.ItemTemplate>
</ListBox>

C#

实施例

using (ordersDBDataContext miDataContext = new ordersDBDataContext("Data Source='isostore:/mydatabase.sdf'"))
                {    
                    var _lista = from p in miDataContext.orders
                                     join t in miDataContext.tipos on p.idTipo equals t.idTipo 
                                     orderby p.refe
                                     where p.idCliente == _idCli
                                          select new 
                                          {
                                              p.refe, p.country,p.idOrder,t.tipo

                                          };

                    this.LstOrders.ItemsSource = _lista;                   
                }

RESULT

没有显示任何数据。出了什么问题?

iF我这样做我可以看到_lista包含正确的数据:

foreach (var rr in _lista)
{
       MessageBox.Show(rr.tipo);
}

2 个答案:

答案 0 :(得分:1)

您正在处理DataContext(正确),但这意味着当执行_lista查询时,DataContext将不再有效,并且会出现异常。在某些情况下,WPF无助于吞下异常,因此您可能没有看到异常。

解决方案是使用:

this.LstOrders.ItemsSource = _lista.ToList();

并从xaml中移除ItemsSource={Binding}或者将绑定留在并使用

this.LstOrders.DataContext = _lista.ToList(); 

另请参阅Silverlight 4 Data Binding with anonymous types,这可能与您的问题有关。

答案 1 :(得分:0)

我不知道您的代码段的上下文,但我猜你可能需要调用

this.LstOrders.Items.Refresh();

我无法准确解释为什么我不熟悉WPF,但在winforms中它将是一个DataBind()。