繁体   English   中英

WPF Datagrid 在其他 Datagrid

[英]WPF Datagrid inside other Datagrid

我目前正在尝试将Datagrid嵌套在另一个 Datagrid 中。

我基本上是在尝试重现这个界面(它不是我现在拥有的那个)。

在此处输入图像描述

这是用于创建我的界面的代码的缩小版本。

<DataGrid x:Name="myDataGrid" ItemsSource="{Binding ProductsList}" x:FieldModifier="public" AutoGenerateColumns="False" Grid.Row="1">
                <DataGrid.Columns>
                    <DataGridTemplateColumn Width=".031*">
                        <DataGridTemplateColumn.HeaderTemplate>
                            <DataTemplate>
                                <StackPanel >
                                    <TextBlock Text="No. Mat" />
                                    <TextBlock Text="Format" />
                                    <TextBlock Text="No. Cas" />
                                </StackPanel>
                            </DataTemplate>
                        </DataGridTemplateColumn.HeaderTemplate>
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate x:Name="productFormatData">
                                <StackPanel>
                                    <TextBlock Text="{Binding MATProductNumber}" FontWeight="DemiBold" />
                                    <TextBlock Text="{Binding tblFormat.FormatName}" />
                                    <TextBlock Text="{Binding tblProduct.ProductCASNumber}" />
                                </StackPanel>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>

                    <DataGridTemplateColumn Width=".05*" >
                        <DataGridTemplateColumn.HeaderTemplate>
                            <DataTemplate>
                                <TextBlock Text="No. Lot" />
                            </DataTemplate>
                        </DataGridTemplateColumn.HeaderTemplate>
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <TextBlock Text="{Binding ProductsLot}" Foreground="Black" />
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>

                    <DataGridTemplateColumn Width=".055*">
                        <DataGridTemplateColumn.HeaderTemplate>
                            <DataTemplate>
                                <TextBlock Text="Actions" />
                            </DataTemplate>
                        </DataGridTemplateColumn.HeaderTemplate>
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <StackPanel Orientation="Horizontal">
                                    <Button x:Name="modifyBtn" ToolTip="Modifier une fiche">
                                        <materialDesign:PackIcon Kind="Pencil" Width="25" Height="25" VerticalAlignment="Center"/>
                                    </Button>
                                    <Button x:Name="deleteBtn" ToolTip="Supprimer la fiche">
                                        <materialDesign:PackIcon Kind="Delete" Width="25" Height="25" VerticalAlignment="Center"/>
                                    </Button>
                                </StackPanel>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>

                   <DataGridTemplateColumn Width="0.1*">
                    <DataGridTemplateColumn.HeaderTemplate>
                        <DataTemplate>
                            <TextBlock Text="Dangers" />
                        </DataTemplate>
                    </DataGridTemplateColumn.HeaderTemplate>

                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            //INSERT OTHER Datagrid HERE OR RowDetails? 
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
</DataGrid>

这部分按预期工作。 导致我出现问题的部分是Dangers ' Column (在屏幕截图中以红色突出显示)。

这是我尝试过的代码:

<DataGridTemplateColumn Width="0.1*">
                        <DataGridTemplateColumn.HeaderTemplate>
                            <DataTemplate>
                                <TextBlock Text="Dangers" />
                            </DataTemplate>
                        </DataGridTemplateColumn.HeaderTemplate>

                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                //INSERT OTHER Datagrid HERE OR RowDetails? 
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>

我需要在行中绑定List DangerIcons(字符串列表)。 它可以包含 0 到 8 个危险,所以我真的需要它连续出现。

基本上,我一直在阅读其他线程,似乎建议在DataGridTemplateColumn.CellTemplateDataTemplate中添加另一个Datagrid 这是正确的,如果是这样,我应该怎么做?

提前致谢!

您需要的只是一个图标列表。 我认为 ItemsControl 就足够了。 请记住将其方向设置为水平。

<StackPanel Orientation="Horizontal">
<Image ...   Visibility = {Binding DangerIcons ,Converter={StaticResource DangerConverter},ConverterParameter="danger1"}/>
<Image ...   Visibility = {Binding DangerIcons ,Converter={StaticResource DangerConverter},ConverterParameter="danger2"}/>
<Image ...   Visibility = {Binding DangerIcons ,Converter={StaticResource DangerConverter},ConverterParameter="danger3"}/>
<Image ...   Visibility = {Binding DangerIcons ,Converter={StaticResource DangerConverter},ConverterParameter="danger4"}/>
<Image ...   Visibility = {Binding DangerIcons ,Converter={StaticResource DangerConverter},ConverterParameter="danger5"}/>
<Image ...   Visibility = {Binding DangerIcons ,Converter={StaticResource DangerConverter},ConverterParameter="danger6"}/>
<Image ...   Visibility = {Binding DangerIcons ,Converter={StaticResource DangerConverter},ConverterParameter="danger7"}/>
</StackPanel>

你用你的方式

而且您必须使用“转换器”

如果 List DangerIcons 有 ("Danger2","Danger3","Danger5")

 public class DangerToVisibilityConverter : MarkupExtension, IValueConverter
    {
        static DangerToVisibilityConverter convertor;

        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {

            Type type = value.GetType();
            if (type.Equals(typeof(List<string>)))
            {
                List<string> list = value as List<string>;
                foreach(var data in list)
                {
                    if (data.Equals(parameter.ToString()))
                    {
                        return Visibility.Visible;
                    }
                }
            }

            return Visibility.Collapsed;
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }

        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            if (convertor == null)
            {
                convertor = new DangerToVisibilityConverter();
            }

            return convertor;
        }


        public DangerToVisibilityConverter()
        {

        }
    }

只有具有相应字母的元素可见。

自然必须在ResourceDictionary中注册

制作资源字典

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    ...
                    xmlns:Converter="your converter'address">
    <Converter:DangerToVisibilityConverter  x:Key="DangerToVisibilityConverter "/>

</ResourceDictionary>

然后你可以使用转换器

我终于解决了,感谢Zion Yang。

我只是在 Datagrid 中添加了以下 ItemsControl:

<DataTemplate>
    <ItemsControl ItemsSource="{Binding TransportClassList}">
        <ItemsControl.ItemsPanel>
           <ItemsPanelTemplate>
              <StackPanel Orientation="Horizontal" Margin="5,0,0,0" />
                 </ItemsPanelTemplate>
                     </ItemsControl.ItemsPanel>

                     <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <StackPanel>
                               <Image Source="{Binding TransportIcons}" ToolTip="{Binding DangerTypeName}"  />
                            </StackPanel>
                        </DataTemplate>
                     </ItemsControl.ItemTemplate>
                  </ItemsControl>
               </DataTemplate>
         </DataGridTemplateColumn.CellTemplate>
    </DataGridTemplateColumn>
</DataTemplate>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM