我花了半天多的时间来完成这项任务,对于一棵树,我看不到森林。
目的是将数据(DataGrid)按顺序显示为具有动态列数的多个网格,其中每个单元格(不仅仅是列)可以通过双向绑定进行编辑或不可编辑。
我想避免使用代码隐藏方法,我相信xaml可以为我提供我需要的东西。其他的是mvvm注射。
让我们简单一点,先为一个表做绑定。
我的第一个难点是创建DataTable,但这不能用于单元格可编辑级别。然后我创建了对象集合的集合(对于一个表 - >多行 - >多列)。
public class DataGridCell : BaseViewModel
{
public string Value
....
public bool IsEditable
....
}
然后我有另一个代表一个表(网格)的VM,其中包含VM
public class DataGridItem : BaseViewModel
{
public string TableName
{
....
}
public ObservableCollection<ObservableCollection<DataGridCell>> Data
{
....
}
}
然后我的xaml看起来像这样
<DataGrid ItemsSource="{Binding Path=Data}" AutoGenerateColumns="True">
<DataGrid.Resources>
<DataTemplate x:Key="ReadonlyCellTemplate">
<TextBlock Text="{Binding Value}" />
</DataTemplate>
<DataTemplate x:Key="EditableCellTemplate">
<TextBox Text="{Binding Value}" />
</DataTemplate>
</DataGrid.Resources>
<DataGridTemplateColumn CellTemplate="{StaticResource ReadonlyCellTemplate}">
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ContentPresenter x:Name="Presenter" ContentTemplate="{StaticResource ReadonlyCellTemplate}" />
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding IsEditable, PresentationTraceSources.TraceLevel=High}" Value="True">
<Setter TargetName="Presenter" Property="ContentTemplate" Value="{StaticResource EditableCellTemplate}" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
</DataGrid>
这个想法是动态选择数据输入控件将填充哪个单元格,哪些不是。 问题具有约束力。我无法弄清楚如何绑定集合中的具体单元格元素。
感谢您提供任何可能的建议
答案 0 :(得分:0)
我希望现在还为时不晚,但这就是我解决将细胞与动态数据绑定的问题:
Problems binding to a the content of a WPF DataGridCell in XAML
(根据要求添加代码)