我有一个数据网格,我根据几个标准(日期和部门)动态创建列。每列都实际上是一个列表框,其中包含要拖动的项目。
我的问题是每个列表框项源都不同。通过阅读标题我可以看到如何找到源的唯一方法(我想在我的列和单元格中添加某种参数,但我无法找到它。
有没有办法做到这一点?
问候,
答案 0 :(得分:1)
你可以将你的xaml作为
<Window.Resources>
<DataTemplate x:Key="Field1CellTemplate" >
</DataTemplate>
<DataTemplate x:Key="DeptCellTemplate" >
</DataTemplate>
</Window.Resources>
<Grid>
<DataGrid Name="grid" AutoGenerateColumns="false">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Field1" CellEditingTemplate="{StaticResource Field1CellTemplate}" Width="100">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Field1}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn >
<DataGridTemplateColumn Header="Dept" CellEditingTemplate="{StaticResource DeptCellTemplate}" Width="100">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Dept}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn >
</DataGrid.Columns>
</DataGrid>
</Grid>
您已将每列数据的itemssource动态设置为
DataTemplate Field1CellTemplate = this.TryFindResource("Field1CellTemplate") as DataTemplate;
if (Field1CellTemplate != null)
{
var frameworkElementFactory = new FrameworkElementFactory(typeof(ComboBox));
frameworkElementFactory.SetValue(ComboBox.ItemsSourceProperty, new object[] { "option1", "option2", "option3" });
Field1CellTemplate.VisualTree = frameworkElementFactory;
}
DataTemplate DeptCellTemplate = this.TryFindResource("DeptCellTemplate") as DataTemplate;
if (Field1CellTemplate != null)
{
var frameworkElementFactory = new FrameworkElementFactory(typeof(ComboBox));
frameworkElementFactory.SetValue(ComboBox.ItemsSourceProperty, new object[] { "CS", "ETC", "IT" });
DeptCellTemplate.VisualTree = frameworkElementFactory;
}
DataTable dt = new DataTable();
dt.Columns.Add("Field1");
dt.Columns.Add("Dept");
dt.Rows.Add(new object[] { "option1", "CS"});
dt.Rows.Add(new object[] { "option3", "IT" });
dt.Rows.Add(new object[] { "option2", "ETC" });
grid.ItemsSource = dt.DefaultView;
希望这有帮助!
答案 1 :(得分:0)
原来这很简单
Dim oLstBox As ListBox = e.Source
Dim poste As T_Ref_Poste = oLstBox.DataContext
Dim row = dgHoraire.ItemContainerGenerator.ContainerFromItem(poste)