Wpf:自定义Datagrid在组合框内 [英] Wpf : Custom Datagrid inside combobox
问题描述
这是我的要求:
我试着去忍受它。
这是我的XAML:
< DataGrid AutoGenerateColumns =False
ItemsSource ={Binding OrderItems}
AlternatingRowBackground ={DynamicResource InflowDataGridAlternateBackgroundBrush>
< DataGrid.Columns>
< DataGridTemplateColumn Width =200Header =Item>
< DataGridTemplateColumn .CellTemplate>
< DataTemplate>
< TextBlock Text ={Binding ProductName,Mode = OneWay}/>
< / DataTemplate>
< / DataGridTemplateColumn .CellTemplate>
< DataGridTemplateColumn.CellEditingTemplate>
< DataTemplate>
< ComboBox>
< ComboBox.ItemTemplate>
< DataTemplate>
< vw:CustomDatagrid />
< / DataTemplate>
< /ComboBox.ItemTemplate>
< / ComboBox>
< / DataTemplate>
< /DataGridTemplateColumn.CellEditingTemplate>
< / DataGridTemplateColumn>
< /DataGrid.Columns>
< / DataGrid>
CustomDataGrid:
code>< UserControl x:Class =RH_Maize.View.CustomDatagrid
xmlns =http://schemas.microsoft.com/winfx/2006/xaml/presentation
xmlns: x =http://schemas.microsoft.com/winfx/2006/xaml
xmlns:mc =http://schemas.openxmlformats.org/markup-compatibility/2006
xmlns: d =http://schemas.microsoft.com/expression/blend/2008
mc:Ignorable =dWidth =590Height =251>
< Grid Background ={DynamicResource GridBackgroundBrush}>
< DataGrid>
< DataGrid.Columns>
< DataGridTextColumn MinWidth =150Header =Category/>
< DataGridTextColumn MinWidth =180Header =Item/>
< DataGridTextColumn MinWidth =130Header =Rate/>
< /DataGrid.Columns>
< / DataGrid>
< / Grid>
< / UserControl>
但是当我点击DatagridTemplate列时,我只能获得正常的组合框没有自定义Datagrid。
我的代码有什么问题?
如何在wpf的组合框内实现上述(image)CustomDatagrid? >
编辑:
当组合框文本通过绑定更改时,如何填充customDataGrid?
您不需要ComboBox中的ItemTemplate
< DataGrid AutoGenerateColumns =FalseName =tstgrid
ItemsSource ={Binding OrderItems}
>
< DataGrid.Columns>
< DataGridTemplateColumn Width =200Header =Item>
< DataGridTemplateColumn.CellTemplate>
< DataTemplate>
< TextBlock Text ={Binding ProductName,Mode = OneWay}/>
< / DataTemplate>
< /DataGridTemplateColumn.CellTemplate>
< DataGridTemplateColumn.CellEditingTemplate>
< DataTemplate>
< ComboBox>
< vw:CustomDatagrid />
< / ComboBox>
< / DataTemplate>
< /DataGridTemplateColumn.CellEditingTemplate>
< / DataGridTemplateColumn>
< /DataGrid.Columns>
< / DataGrid>
I have a view in which I have a datagrid , in the datagrid I put one column as DataGridTemplateColumn .I put one combobox in the DataGridTemplate column,I define a datatemplate inside the combobox.Hence the user can enter text on the combobox the results filtered into the CustomeDatagrid and user can select Item on the CustomeDatagrid .
Here is my requirement:
I try to acheive it. Here is my XAML:
<DataGrid AutoGenerateColumns="False"
ItemsSource="{Binding OrderItems}"
AlternatingRowBackground="{DynamicResource InflowDataGridAlternateBackgroundBrush>
<DataGrid.Columns>
<DataGridTemplateColumn Width="200" Header="Item">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding ProductName,Mode=OneWay}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox>
<ComboBox.ItemTemplate>
<DataTemplate>
<vw:CustomDatagrid />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
CustomDataGrid :
<UserControl x:Class="RH_Maize.View.CustomDatagrid"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d" Width="590" Height="251">
<Grid Background="{DynamicResource GridBackgroundBrush}">
<DataGrid>
<DataGrid.Columns>
<DataGridTextColumn MinWidth="150" Header="Category"/>
<DataGridTextColumn MinWidth="180" Header="Item"/>
<DataGridTextColumn MinWidth="130" Header="Rate"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
</UserControl>
But when I click on the DatagridTemplate column I only get normal combobox no Custom Datagrid.
Whats wrong with my code?
How to achieve the above(image) CustomDatagrid inside the combobox in wpf ?
Edit:
How to populate the customDataGrid when the combobox text changed via binding ?
You don't need ItemTemplate inside the ComboBox
<DataGrid AutoGenerateColumns="False" Name="tstgrid"
ItemsSource="{Binding OrderItems}"
>
<DataGrid.Columns>
<DataGridTemplateColumn Width="200" Header="Item">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding ProductName,Mode=OneWay}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox>
<vw:CustomDatagrid />
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
这篇关于Wpf:自定义Datagrid在组合框内的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!