隐藏和重新排列PagedCollectionView中的列

时间:2013-01-31 09:57:17

标签: silverlight mvvm datagrid silverlight-5.0 pagedcollectionview

我有一个 silverlight 5.0 应用,其中PagedCollectionView的{​​{1}} 员工

我已将ObservableCollection绑定到PagedCollectionView

我不想在DataGrid

中显示我的所有员工属性

我希望通过datagrid

自行安排我的专栏

但我不知道该怎么做

请帮忙。

2 个答案:

答案 0 :(得分:4)

您应该在模板字段中添加任何控件并与寻呼机属性绑定:

<sdk:DataGrid Grid.Row="2" Style="{StaticResource RegularDataGridStyle}" Margin="8"
                      ItemsSource="{Binding ElementName=DemoSeachMast,Path=DataContext.DemmoPager}"
                      IsReadOnly="True"
                      CanUserReorderColumns="False" 
                      SelectedItem="{Binding ElementName=DemoSeachMast,Path=DataContext.SelectedDemoSearch,Mode=TwoWay}" Grid.ColumnSpan="2">
            <sdk:DataGrid.Effect>
                <DropShadowEffect/>
            </sdk:DataGrid.Effect>

            <sdk:DataGrid.Columns>

                <sdk:DataGridTemplateColumn Header="Details">
                    <sdk:DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>

                            <Button x:Name="btnImage" Click="Button_Click" Width="25">
                                <Button.Template>
                                    <ControlTemplate>
                                        <Border CornerRadius="5" Background="Transparent">

                                            <Image Source="/Assets/Icons/Window.png" Height="25" Width="25"/>
                                        </Border>
                                    </ControlTemplate>
                                </Button.Template>
                            </Button>

                        </DataTemplate>
                    </sdk:DataGridTemplateColumn.CellTemplate>
                </sdk:DataGridTemplateColumn>




            </sdk:DataGrid.Columns>
        </sdk:DataGrid>

答案 1 :(得分:1)

有两种方法可以做到这一点。在这两种情况下,您需要将 AutoGenerateColumn设置为false

  1. 如果您已经知道要在设计时在网格中显示的列,请直接在XAML中添加列。
  2. 如果您在设计时不知道该列,并且它是否来自数据库,并且某些属性描述了顺序和可见性,则添加autogeneratingcolumn事件,并且在此事件中,您可以使列可见或不创建列甚至改变顺序。
  3. * 编辑 *

      

    grid.ItemsSource = Product.GetProducts(200);
                  grid.AutoGeneratingColumn + = grid_AutoGeneratingColumn;


      

    void grid_AutoGeneratingColumn(object sender,DataGridAutoGeneratingColumnEventArgs e)           {               string headername = e.Column.Header.ToString();

            switch (headername)
            {
                case "Line":
                case "Color":
                    e.Cancel = true; //Cancel the columns don't want to generate
                    break;
                case "Name":
                    e.Column.Header = "Name Modified";
                    e.Column.DisplayIndex = 1;
                    break;
                case "Price":
                    e.Column.Header = "Price header";
                    e.Column.DisplayIndex = 0;
                    break;
                default:
                    e.Cancel = true;
                    break;
            }
        }
    


    从示例中可以看出,Price位于Name之后,但不仅更改了标题我还更改了显示顺序。如果您要运行,则price作为第一列,Name作为第二列,所有其他列将从显示中删除。
    http://msdn.microsoft.com/en-us/library/system.windows.controls.datagrid.autogeneratingcolumn(v=vs.95).aspx

    希望这有帮助。