我知道这个话题之前出现了几次,但我已经尝试过我在这里找到的方法,但似乎都没有。我不知道是不是因为我使用了不同的绑定源,或者我只是失败了,或者是什么......
我有一个DataGrid绑定到读入内存的XML文档。我有一个List,其中包含一列可能存在的所有不同值,并希望将其用作ComboBox列的ItemsSource。
我的XAML如下:
<DataGrid AutoGenerateColumns="False" IsReadOnly="False" Height="400" HorizontalAlignment="Left" Margin="125,15,0,0" x:Name="dg" VerticalAlignment="Top" Width="500">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Width="40*" Binding="{Binding Path=Element[name].Value}" />
<DataGridTextColumn Header="Count" Width="10*" Binding="{Binding Path=Attribute[count].Value}" />
<!-- I want this to be a ComboBox in a DataGridTemplateColumn -->
<DataGridTextColumn Header="Category" Width="25*" Binding="{Binding Path=Attribute[category].Value}" />
<DataGridTextColumn Header="Image Path" Width="25*" Binding="{Binding Path=Element[image].Value}" />
</DataGrid.Columns>
</DataGrid>
显示的示例XML节点如下所示:
<entry count="1" category="someCategory">
<name>Entry 1</name>
<image>c:\image.png</image>
</entry>
最后,我想用作ComboBoxes的ItemsSource的列表:
var categories = from category in xmlDoc.Root.Elements("entry") select category .Attribute("category").Value;
List<string> catList= categories .ToList<string>();
因此,当用户编辑类别字段时,我希望他们有一个包含列表中包含的可能值的下拉列表。
编辑:最后得到了这个工作,我按照接受的答案中的说明,将ComboBox的ItemsSource设置为
ItemsSource="{DynamicResource categoryList}"
然后在创建我想用来填充ComboBoxes的列表项后在代码中执行此操作:
Resources["categoryList"] = catList;
答案 0 :(得分:0)
您必须使用CellTemplate和CellEditingTemplate构建DataGridTemplateColumn。以下内容应该为您提供正确的启动方向
<DataGridTemplateColumn Header="Category" Width="100">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding YourProperty}" "/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding YourSource, Mode=OneTime or OneWay}"
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>