如何向datagrid单元格显示可点击的事物列表?

时间:2015-10-20 06:39:44

标签: c# wpf datagrid

我有一个datagrid,在我希望显示字符串的其中一列中 - 在列的每个单元格中有一个不同的字符串(我从用户那里获得),如下所示:“data1,data2,data3 ,. ..“并使每个datai(data1,data2,...)可点击。 我怎么能实现呢?

1 个答案:

答案 0 :(得分:0)

以下是编辑版:

  1. Xaml(把它放在<DataGridTemplateColumn.CellTemplate)中:

    <DataTemplate DataType="{x:Type soDataGridHeplAttempt:ClicableItemsModel}">
                        <ListBox HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ItemsSource="{Binding ClickableItems}">
                            <ListBox.ItemsPanel>
                                <ItemsPanelTemplate>
                                    <StackPanel Orientation="Horizontal"></StackPanel>
                                </ItemsPanelTemplate>
                            </ListBox.ItemsPanel>
                            <ListBox.ItemContainerStyle>
                                <Style TargetType="ListBoxItem">
                                    <Setter Property="ContentTemplate">
                                        <Setter.Value>
                                            <DataTemplate>
                                                <Button  Width="70" Content="{Binding }" Style="{StaticResource ButtonInCellStyle}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" 
                                                         Command="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}, Path=DataContext.Command}" 
                                                         CommandParameter="{Binding RelativeSource={RelativeSource Self}, Path=Content}"/>
                                            </DataTemplate>
                                        </Setter.Value>
                                    </Setter>
                                </Style>
                            </ListBox.ItemContainerStyle>
                        </ListBox>
                    </DataTemplate>
    
  2. 如果要编辑按钮内容,Xaml资源会使用此选项:

       <Style x:Key="ButtonInCellStyle" TargetType="Button">
       <Setter Property="ContentTemplate">
           <Setter.Value>
                <DataTemplate>
                    <TextBox Background="{x:Null}" MaxWidth="40" BorderBrush="{x:Null}" Text="{Binding RelativeSource={RelativeSource AncestorType={x:Type Button}}, Path=Content,  Mode=TwoWay, UpdateSourceTrigger=LostFocus}" 
                               HorizontalAlignment="Center" VerticalAlignment="Center" ToolTip="{Binding  RelativeSource={RelativeSource Self}, Path=Text}">
                    </TextBox>
                </DataTemplate>
            </Setter.Value>
       </Setter>
    

  3. 视图模型:

    private ICommand _command;
    public ObservableCollection<ClicableItemsModel> Strings { get; set; }
    
    public ICommand Command
    {
        get { return _command ?? (_command = new RelayCommand<object>(MethodOnCommmand)); }
    }
    
    private void MethodOnCommmand(object obj)
    {
    
    }
    
  4. Clickable Items模型代码(创建ClicableItemsModel类并将其放在那里):

    public ObservableCollection<String> ClickableItems { get; set; }
    
  5. 运行时: enter image description here

  6. 的问候,