2012-09-26 179 views
0

下面xaml datagrid给我两个额外的列,在图像列之前和价格列之后。我该如何禁用它?隐藏datgrid自动添加的列

<DataGrid Name="dgProductList" AutoGenerateColumns="False" FontSize="18" 
            ScrollViewer.CanContentScroll="False"  
            ScrollViewer.VerticalScrollBarVisibility="Auto" 
            ScrollViewer.HorizontalScrollBarVisibility="Auto"> 
          <DataGrid.Columns> 
           <DataGridTemplateColumn Header="Image"> 
            <DataGridTemplateColumn.CellTemplate> 
             <DataTemplate> 
              <Image Height="10" Width="10" Source="{Binding Picture}" Stretch="Uniform"></Image> 
             </DataTemplate> 
            </DataGridTemplateColumn.CellTemplate> 
           </DataGridTemplateColumn> 
           <DataGridTextColumn Binding="{Binding Name}" Header="Item" /> 
           <DataGridTextColumn Header="Qty" /> 
           <DataGridTextColumn Binding="{Binding Price}" Header="Price" /> 
          </DataGrid.Columns> 
         </DataGrid> 

谢谢。

回答

1

如果我只是复制并粘贴您的xaml,没有额外的列。也许在创建列的代码隐藏文件中有一些代码?

+0

是,当我从代码添加排座椅后面时才会发生。我正在使用这样的this.dgProductList.Items.Add(产品);产品是一个模型对象,它具有更多的属性,然后是数据网格。 – Alvin

+0

您应该尽量避免将项目直接添加到控件。我不知道问题是什么,因为我可以通过数据绑定来实现所有功能。请参阅我的新答案 – doerig

+0

我想我正在使用AutoGenerateColumns =“False”。 – Alvin

3

添加的ItemsSource在DataGrid中绑定:

<DataGrid Name="dgProductList" AutoGenerateColumns="False" FontSize="18" 
           ScrollViewer.CanContentScroll="False" 
           ScrollViewer.VerticalScrollBarVisibility="Auto" 
           ScrollViewer.HorizontalScrollBarVisibility="Auto" 
      ItemsSource="{Binding Products}" MouseDoubleClick="dgProductList_MouseDoubleClick"> 

代码隐藏:

public class Product : NotificationObject 
{ 
    public string Name { get; set; } 
} 

public IList<Product> Products { get; set; } 

public MainWindow() 
{ 
    Products = new ObservableCollection<Product> 
    { 
     new Product {Name = "test1"}, 
     new Product {Name = "test2"}, 
    }; 

    DataContext = this; 

    InitializeComponent(); 
} 

private void dgProductList_MouseDoubleClick(object sender, MouseButtonEventArgs e) 
{ 
    Products.Add(new Product { Name = "test x" }); 
} 
+0

谢谢,但我需要使用datagridtemplate,所以我必须分配一个comlumn。 – Alvin

+0

是的,这没问题,我只是缩短了XAML只显示改变的部分。您可以正常设置列。但不是直接将新项目添加到数据网格中,而是将其添加到Products集合中,并且由于itemssource绑定到此集合,所以新项目将出现在网格中 – doerig

+0

您可以使用datagridtemplate和ItemsSource绑定。 –