我知道这个问题之前已经得到了回答,但是看了大多数问题,他们使用了代码,我理解在MVVM中永远都不行,其他人也使用MVVM模式。我拒绝使用模式,因为我想从头开始学习。我能够正确绑定ItemsSource但是如何绑定到datagrid标题等。
我认为这很常见,但我想要的是能够拥有带标题的数据“表格”。我希望用户能够右键单击标题行并关闭和打开列。那部分我并不担心如何去做。
我问的是如何使用没有代码隐藏或框架的动态列/标题的数据网格。我不知道如何从viewmodel绑定到datagrid。
答案 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"); }
}