Wpfでは、異なる列に異なる列のコントロールを含むデータグリッドを同じ列に作成できますか?データグリッド列に別の行の異なるコントロールタイプが含まれている可能性があります
- 1行目:5つのcolsの、2行、第五COLで、約4最初のcolsを気にしないとデータグリッド:それはテキストボックス
- 2行目です:それはコンボボックスです最も簡単なケースでは
。
ありがとう!
Wpfでは、異なる列に異なる列のコントロールを含むデータグリッドを同じ列に作成できますか?データグリッド列に別の行の異なるコントロールタイプが含まれている可能性があります
。
ありがとう!
あなたはこの機能を実現するために、いくつかのトリガーと組み合わせDataGridTemplateColumnを使用することができます。
はこれを参照してください。
これは、DataGridを(文字列)コントロールタイプのリストにバインドするデモアプリケーションです。最初の列はコントロールタイプの文字列を表示し、2番目の列は同じ情報に基づいて対応するコントロールを表示します。あなたは、XAMLは、もう少し簡潔にすることができるかもしれないが、これはそれのJISTです:
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" };
}
}
}
はい、可能です。列のテンプレートを作成する必要があります。 WPF DataGrid different edit controls within a single column
ありがとう、私は今できる。私は非常に理解しやすい命令を見つけました:http://code.msdn.microsoft.com/mag201104DataPoints。私はあなたの指示をまだ試みていませんが、意味があるようです。 – kidgu
これは、動的に選択しているコントロールへのデータバインディングとはどのように機能しますか? – bgura
この場合バインディング作業はどのように行うことができますか?たとえば、次のようになります。 、Textプロパティを何かにバインドするにはどうすればよいですか?問題は、このTextBoxにDataContextがなく、親のdatacontextが見えないことです。 –
nightcoder