2017-12-11 5 views
0

私はviewModelのコレクションを表示するために使用する次のItemsControlを持っています。Display Items単一のDataGrid行としてのコントロール

<Border> 
    <ItemsControl ItemsSource="{Binding MyViewModel.MyCollection}"> 
     <ItemsControl.ItemsPanel> 
      <ItemsPanelTemplate> 
       <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Margin="20"/> 
      </ItemsPanelTemplate> 
      </ItemsControl.ItemsPanel> 
      <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <ContentControl Content="{Binding}"/> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
    </ItemsControl> 
</Border> 

そして、背後にあるコードは次のとおりです。

MyCollection = new ObservableCollection<ViewModel>(); 

foreach(var model in MyModelList) 
{ 
    var myViewModel = new ViewModel(model); 

    MyCollection.Add(myViewModel); 
} 

は今、これは正常に動作します。ただし、ItemsControlを持たない場合は、MyCollection ObservableCollectionに追加する項目が2つしかないためです。

グリッド列を別々に表示するには、1つの行のデータグリッド内の2つのviewModelをそれぞれ独自の列に追加します。 (たとえば、ユーザーが1つのviewModelをクリックしたときに、その列のデータギャルドの背景を変更したい場合)

これを行うにはどうすればよいですか?

+0

は、あなたのデータグリッドでのコード例を提案してくださいことはできますか? ItemsControlコードがこの場合に役立つかどうかわかりません。 –

+0

いいえいいえ、ItemsControlを削除します。私は1つのViewモデルをDataGridの行= 0の列= 0に配置し、もう1つのViewModelをDataGridの行= 0の列= 1に配置します。 –

答えて

0

あなたは、たとえば、(this questionを参照)、特定の列のセルのためのテンプレートを作成することができます

<DataGridTemplateColumn Header="..."> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <ContentControl Content="{Binding}"/> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 
2

2つのビューモデル保持しているクラスを作成します。

public class RowOfViewModels 
{ 
    public ViewModel ViewModelA { get; set; } 
    public ViewModel ViewModelB { get; set; } 
} 

を...とDataGridItemsSourceプロパティを単一のインスタンスを含むコレクションに設定またはバインドします。

dataGrid.ItemsSource = new List<RowOfViewModels>(1) { ViewModelA = new ViewModel(), ViewModelB = new ViewModel() }; 

XAML:

<DataGrid x:Name="dataGrid"> 
    <DataGrid.Columns> 
     <DataGridTemplateColumn Header="1"> 
      <DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <Grid> 
         <TextBlock Text="{Binding SomePropertyOfViewModelA}" /> 
        </Grid> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
     </DataGridTemplateColumn> 
     <DataGridTemplateColumn Header="2"> 
      <DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <Grid> 
         <TextBlock Text="{Binding SomePropertyOfViewModelB}" /> 
        </Grid> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
     </DataGridTemplateColumn> 
    </DataGrid.Columns> 
</DataGrid> 
関連する問題