DataGrid的XAML绑定

时间:2014-03-21 01:46:44

标签: c# wpf wpf-controls

这是DataGrid的XAML绑定的要求。

  1. 我的代码隐藏文件
  2. 中有4个列表(IList<T>
  3. 需要使用4列的WPF DataGrid;每个列表1列
  4. 需要将每个列表绑定到网格中的相应列
  5. 您可以假设字符串显示在网格列的每个列表中
  6. 我的问题是如何在DataGridcolumnTemplate中使用这些列表(对于ex,ListBox等...) 有人可以解释一下吗?

3 个答案:

答案 0 :(得分:0)

WPF DataGrid派生自ItemsControl,这意味着它只支持绑定到一个集合。这是我的理解。所以我认为在你的情况下,一个可能的解决方案是使用四个ListBox控件并排排列并制作样式,使它们看起来更像Grid,如果你想要相似的外观和感觉。

答案 1 :(得分:0)

如果您绑定到数据网格,最好有一个List而不是单独的List。

例如,

你有一个班级:

 public class Product 
    {
        public decimal guProductId { get; set; }
        public string productCode { get; set; }
    }
 List<Product> Products;

可以绑定到数据网格,而不是单独列出GuProductID和ProductCodes,如下所示。

   List<decimal> guProductIds;
   List<string> productCodes;

将List绑定到datagrid很容易,而不是使用Individual Lists。

答案 2 :(得分:0)

如果您没有义务使用DataGrid,为什么不创建自己的用户控件来托管4个ListBox,并用每个List填充它们。像这样......

   <UserControl x:Class="Listboxes.ListBoxes"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    <UserControl.Resources>
        <DataTemplate x:Key="lbItemTemplate">
            <Label Content="{Binding}"/>
        </DataTemplate>
    </UserControl.Resources>

    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>
            <ColumnDefinition/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <ListBox Grid.Column="0"
                 ItemsSource="{Binding}"
                 ItemTemplate="{StaticResource lbItemTemplate}"/>
        <ListBox Grid.Column="1"
                 ItemTemplate="{StaticResource lbItemTemplate}"/>
        <ListBox Grid.Column="2"
                 ItemTemplate="{StaticResource lbItemTemplate}"/>
        <ListBox Grid.Column="3"
                 ItemTemplate="{StaticResource lbItemTemplate}"/>

    </Grid>
</UserControl>