Wpf:自定义Datagrid在组合框内 [英] Wpf : Custom Datagrid inside combobox

查看:227
本文介绍了Wpf:自定义Datagrid在组合框内的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个视图,我有一个datagrid,在datagrid我把一列作为DataGridTemplateColumn。我把一个组合框在DataGridTemplate列中,我在组合框内定义一个数据表。用户可以在组合框中输入文本结果过滤到CustomeDatagrid,用户可以在CustomeDatagrid上选择项目。



这是我的要求:



我试着去忍受它。
这是我的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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆