在Wpf中,我可以创建一个数据网格,其中不同的行在同一列中包含不同类型的控件吗?
最简单的情况:带有5个cols,2行的datagrid,不关心4个col cols,在第5列:
谢谢!
答案 0 :(得分:7)
您可以使用DataGridTemplateColumn结合一些触发器来实现此功能。
这是一个演示应用程序,它将DataGrid绑定到(字符串)控件类型列表。第一列只显示控件类型字符串,第二列作用于相同的信息以显示相应的Control。您可能能够使xaml更简洁,但这是它的主旨:
XAML:
<Window x:Class="DataGridWithMultipleTypesPerColumn.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<DataGrid ItemsSource="{Binding ControlTypes}"
AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Control Type" Binding="{Binding}"/>
<DataGridTemplateColumn Header="Actual Control">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ContentControl>
<ContentControl.Style>
<Style TargetType="ContentControl">
<Style.Triggers>
<DataTrigger Binding="{Binding}" Value="TextBox">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<TextBox Text="Default Text"/>
</DataTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
<DataTrigger Binding="{Binding}" Value="CheckBox">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<CheckBox Content="Check Box"/>
</DataTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
<DataTrigger Binding="{Binding}" Value="Button">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<Button Content="Button"/>
</DataTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</ContentControl.Style>
</ContentControl>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
代码隐藏和视图模型:
namespace DataGridWithMultipleTypesPerColumn
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = new ViewModel();
}
}
public class ViewModel
{
public ObservableCollection<string> ControlTypes
{
get;
private set;
}
public ViewModel()
{
ControlTypes = new ObservableCollection<string>() { "Button", "TextBox", "CheckBox" };
}
}
}
答案 1 :(得分:2)
是的,你可以。您需要为列创建模板。
请参阅:WPF DataGrid different edit controls within a single column