我有以下用于显示viewModel集合的ItemsControl。
<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中。
我想将两个viewModel中的每一个添加到单行datagrid中的各自列中,以便以不同方式显示网格列。 (例如,当用户点击一个viewModel时,我想仅更改该列的datagird背景)
如何修改上述内容才能执行此操作?
答案 0 :(得分:2)
创建一个包含两个视图模型的类:
public class RowOfViewModels
{
public ViewModel ViewModelA { get; set; }
public ViewModel ViewModelB { get; set; }
}
...并将ItemsSource
的{{1}}属性设置或绑定到包含此实例的单个实例的集合:
DataGrid
<强> XAML:强>
dataGrid.ItemsSource = new List<RowOfViewModels>(1) { ViewModelA = new ViewModel(), ViewModelB = new ViewModel() };
答案 1 :(得分:0)
您可以在特定列中创建Cell的模板(请参阅this question),例如:
<DataGridTemplateColumn Header="...">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ContentControl Content="{Binding}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>