WPF数据网格 - 在每行末尾添加按钮

3
我想在我的数据网格的每一行末尾添加一个按钮。我找到了下面的xaml,但它将按钮添加到了开头。有谁知道如何将其添加到所有数据绑定列之后吗?
这将按钮添加到开头而不是结尾:
  <DataGrid Background ="Black" ItemsSource="{Binding PriceList}">
    <DataGrid.Columns>
      <DataGridTemplateColumn>
        <DataGridTemplateColumn.CellTemplate>
          <DataTemplate>
            <Button>My button</Button>
          </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
      </DataGridTemplateColumn>
    </DataGrid.Columns>
  </DataGrid>

感谢您的预先帮助。

这个绑定是如何工作的? - Hassan Ansari
4个回答

15

您将需要手动添加列。

关闭自动生成列的功能,并按您想要的顺序添加它们,包括在列表末尾添加您的额外列:

  <DataGrid Background ="Black"
            ItemsSource="{Binding PriceList}"
            AutoGenerateColumns="False">
    <DataGrid.Columns>

      <!-- Add your normal columns here -->

      <DataGridTemplateColumn>
        <DataGridTemplateColumn.CellTemplate>
          <DataTemplate>
            <Button>My button</Button>
          </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
      </DataGridTemplateColumn>
    </DataGrid.Columns>
  </DataGrid>

2

查找带有一些样式的按钮控件。样式定义了一个触发器元素,根据按钮的内容/文本更改按钮的背景属性和可见性。

 <DataGrid  ItemsSource="{Binding}" Name="dgvProcessLists" SelectionMode="Single">\
<DataGrid.Columns><DataGridTextColumn Binding="{Binding SIZE_FP}" FontFamily="Verdana" Header="SIZE FP" IsReadOnly="True" Width="100" />
<DataGridTemplateColumn Width="140" Header="Command">
                            <DataGridTemplateColumn.CellTemplate>
                                <DataTemplate>
                                    <Button Content="{Binding  DB_STEP_NAME}" Tag="{Binding STEP_ORDER}" Click="btnContinue_Click" >
                                        <Button.Style>
                                            <Style x:Name="ButtonVisibility">
                                                <Setter Property="Button.Visibility" Value="Hidden"/>
                                                <Style.Triggers>
                                                    <DataTrigger Binding="{Binding STATUS}" Value="Failed">
                                                        <Setter Property="Button.Visibility" Value="Visible"/>
                                                        <Setter Property="Button.Background" Value="#777777"/>
                                                    </DataTrigger>
                                                    <DataTrigger Binding="{Binding STATUS}" Value="Execute">
                                                        <Setter Property="Button.Visibility" Value="Visible"/>
                                                        <Setter Property="Button.Background" Value="AliceBlue"/>
                                                    </DataTrigger>
                                                    <DataTrigger Binding="{Binding STATUS}" Value="Re-Evaluate">
                                                        <Setter Property="Button.Background" Value="Blue"/>
                                                    </DataTrigger>                                                    
                                                    <DataTrigger Binding="{Binding STATUS}" Value="Final">
                                                        <Setter Property="Button.Visibility" Value="Visible"/>
                                                        <Setter Property="Button.Background" Value="Blue"/>
                                                    </DataTrigger>
                                                </Style.Triggers>
                                            </Style>
                                        </Button.Style>
                                    </Button>
                                </DataTemplate>
                            </DataGridTemplateColumn.CellTemplate>
                        </DataGridTemplateColumn>
                            </DataGrid.Columns>
</Datagrid>


1

如果您的数据表格看起来像这样,请尝试以下示例:

 <DataGrid ItemsSource="{Binding PriceList}">
        <DataGrid.Columns>
            <DataGridTemplateColumn>
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal"> 
                           <TextBlock Text="{Binding }"/>
                           <Button>My button</Button>
                        </StackPanel>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>

0

你可以使用转换器按名称选择列!

我是这样创建我的列的:(也许还有其他方法可行)

DataGridTextColumn column = new DataGridTextColumn();
column.Binding = new Binding("ColumnName");
dataGrid.Columns.Add(column)

在您的中,当列具有特定名称时,您可以定义不同的:
...
xmlns:tools="clr-namespace:App.Tools"
...

<ResourceDictionary>

    <tools:CustomButtonConverter x:Key="CustomButtonConv" />

    <DataTemplate x:Key="CustomButton">
        <Button Click="HandlerClick" />
    </DataTemplate>

    <Style x:Key="DataGridCellStyle" TargetType="DataGridCell">
        <Style.Triggers>
            <DataTrigger Binding="{Binding Column, RelativeSource={RelativeSource Mode=Self}, Converter={StaticResource CustomButtonConv}}" Value="ColumnName">
                <Setter Property="ContentTemplate" Value="{StaticResource CustomButton}" />
            </DataTrigger>
        </Style.Triggers>
    </Style>

</ResourceDictionary>

...

<DataGrid x:Name="dataGrid" CellStyle="{StaticResource DataGridCellStyle}" />

ColumnName替换为您的列名称...

您的转换器:

namespace App.Tools
{
    public class CustomButtonConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            var dataGridTextColumn = value as DataGridTextColumn;
            return dataGridTextColumn.SortMemberPath;
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return value;
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接