动态数据网格,可选列

时间:2012-09-26 17:02:32

标签: c# wpf mvvm datagrid

我知道这个问题之前已经得到了回答,但是看了大多数问题,他们使用了代码,我理解在MVVM中永远都不行,其他人也使用MVVM模式。我拒绝使用模式,因为我想从头开始学习。我能够正确绑定ItemsSource但是如何绑定到datagrid标题等。

我认为这很常见,但我想要的是能够拥有带标题的数据“表格”。我希望用户能够右键单击标题行并关闭和打开列。那部分我并不担心如何去做。

我问的是如何使用没有代码隐藏或框架的动态列/标题的数据网格。我不知道如何从viewmodel绑定到datagrid。

2 个答案:

答案 0 :(得分:0)

 <DataGrid AutoGenerateColumns="False" Height="256" HorizontalAlignment="Left" Name="dgEmp" VerticalAlignment="Top" Width="490"  ItemsSource="{Binding DeleteData,Mode=TwoWay}" Margin="6,7,0,0" Grid.RowSpan="3">
                    <DataGrid.Columns>
                        <DataGridTextColumn Header="ID" Binding="{Binding ID,Mode=TwoWay}" IsReadOnly="True" Visibility="Hidden"/>
                        <DataGridTextColumn Header="Description" Binding="{Binding Description,Mode=TwoWay}" IsReadOnly="True"/>
                        <DataGridTextColumn Header="Amount" Binding="{Binding Amount,Mode=TwoWay}" IsReadOnly="True"/>
                        <DataGridTextColumn Header="Date" Binding="{Binding Date,Mode=TwoWay}" IsReadOnly="True"/>
                        <DataGridTextColumn Header="Remark" Binding="{Binding Remark,Mode=TwoWay}" IsReadOnly="True"/>
                        <DataGridTemplateColumn>
                            <DataGridTemplateColumn.CellTemplate>
                                <DataTemplate>
                                    <Button Content="Update" x:Name="btnUpdate"
                            Click="btnUpdate_Click"></Button>
                                </DataTemplate>
                            </DataGridTemplateColumn.CellTemplate>
                        </DataGridTemplateColumn>
                    </DataGrid.Columns>
                </DataGrid>

在此示例中,DataGrid的ItemSource是DeleteData,它是一个ObservableCollection<Expense_Submit>

Expense_Submit是一个我定义了所有属性的类。它看起来像

public class Expense_Submit
{


 private int _ID;

    private string _UserID;

    private string _Description;

    private string _Amount;

    private DateTime _Date;

    private string _Remark;


  }

答案 1 :(得分:0)

因为你必须绑定可见性属性。

Visibility={binding IDVisibile,mode=TwoWay}
在ViewModel中

创建一个属性

 private Visibility _IDVisibile;

            public Visibility IDVisibile
            {
                get { return _BorderVisibility; }
                set { _BorderVisibility = value; RaisePropertyChanged("IDVisibile"); }
            }