2013-02-01 17 views
5

Wpfでは、異なる列に異なる列のコントロールを含むデータグリッドを同じ列に作成できますか?データグリッド列に別の行の異なるコントロールタイプが含まれている可能性があります

  • 1行目:5つのcolsの、2行、第五COLで、約4最初のcolsを気にしないとデータグリッド:それはテキストボックス
  • 2行目です:それはコンボボックスです最も簡単なケースでは

ありがとう!

答えて

6

あなたはこの機能を実現するために、いくつかのトリガーと組み合わせ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" }; 
     } 
    } 
} 
+1

ありがとう、私は今できる。私は非常に理解しやすい命令を見つけました:http://code.msdn.microsoft.com/mag201104DataPoints。私はあなたの指示をまだ試みていませんが、意味があるようです。 – kidgu

+0

これは、動的に選択しているコントロールへのデータバインディングとはどのように機能しますか? – bgura

+1

この場合バインディング作業はどのように行うことができますか?たとえば、次のようになります。、Textプロパティを何かにバインドするにはどうすればよいですか?問題は、このTextBoxにDataContextがなく、親のdatacontextが見えないことです。 – nightcoder

関連する問題