将网格与Silverlight中的两个数据源绑定

时间:2010-11-19 12:00:30

标签: silverlight datagrid silverlight-4.0

我遇到了如何以最佳方式绑定数据网格的问题。

问题是我想使用两个itemSources。 我有一个包含很多事件的列表,每个事件都有一个bug列表。 我想要做的是将半个gridview行与事件中的一些字段绑定,并将网格的一半与事件所持有的相应错误绑定。

我怎样才能以最好的方式做到这一点?

我可以访问componentOne数据网格,但是如果普通网格工作则一切都很好。

但我确实希望有一种排序能力。

谢谢

2 个答案:

答案 0 :(得分:0)

听起来你只想确保没有AutoGenerateColumns="True"

<sdk:DataGrid AutoGenerateColumns="False">    
        <sdk:DataGrid.Columns>
            <sdk:DataGridTextColumn 
                Header="ItemSource1Property1Name" 
                Width="SizeToHeader"
                Binding="{Binding ItemSource1.Property1}" 
                FontSize="20" />
            <sdk:DataGridTextColumn 
                Header="ItemSource1Property2Name" 
                Width="SizeToHeader"
                Binding="{Binding ItemSource1.Property2}" 
                FontSize="20" />
            <sdk:DataGridTextColumn 
                Header="ItemSource2Property1Name" 
                Width="SizeToCells"
                Binding="{Binding ItemSource2.Property1}" 
                FontSize="20" />
        </sdk:DataGrid.Columns>
        .
        .
        .
        Rest of Code
        .
        .
        .
</sdk:DataGrid>

修改

如果您选择为商品来源使用包装,那么您的代码中会有类似的内容:

public class ItemWrapper
{
    ObservableCollection<ItemSource1Type> ItemSource1 {get;set;}
    ObservableCollection<ItemSource2Type> ItemSource2 {get;set;}
}

然后在您的视图模型或代码后面(您想要设置要绑定的属性):

public class ViewModel //This may just end up being your code behind depending on how you have your entire SL project set up.
{
    ItemWrapper ItemWrapper { get; set; } //set the two properties either in the constructor or in whatever code initializes ViewModel.
}

在你的xaml中:

<sdk:DataGrid AutoGenerateColumns="False" 
              ItemSource="{Binding ItemWrapper}"
              DataContext="{Binding}">    
        <sdk:DataGrid.Columns>
            <sdk:DataGridTextColumn 
                Header="ItemSource1Property1Name" 
                Width="SizeToHeader"
                Binding="{Binding ItemSource1.Property1}" 
                FontSize="20" />

答案 1 :(得分:0)

我同意Kavet的想法,但他的解决方案远离现实。 根据{{​​3}}

ItemSourse必须实现IEnumerable接口。

这意味着你的ItemWrapper根本不起作用。

你试过这个吗?