为什么不在你的viewmodel中包含它。我会做的是创建交互的嵌套可枚举viewmodel,即如果datagrid绑定到T的IEnumerable其中T是代表每行的视图模型,id有像该视图模型上的IndexSelected。 然后ID绑定使用某种到indexselected财产的valueconverter背景色,
public class RowViewModel
{
public string Col1 { get; set; }
public string Col2 { get; set; }
public string Col3 { get; set; }
public int IndexSelected { get; private set; }
//Id also make a command here or something to set the indexselected but ill leave that for you :)
}
public class GridViewModel
{
public ObservableCollection<RowViewModel> Rows; // Bound to Datagrid.ItemsSource.
}
通知上indexselected约束力转换PARAM持有列
<sdk:DataGrid>
<sdk:DataGrid.Columns>
<sdk:DataGridTemplateColumn Header="Col1">
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Grid Background="{Binding IndexSelected, Converter={StaticResource IndexToColorConverter}, ConverterParameter=1}">
<TextBlock Text="{Binding Col1}" />
</Grid>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>
<sdk:DataGridTemplateColumn Header="Col2">
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Grid Background="{Binding IndexSelected, Converter={StaticResource IndexToColorConverter}, ConverterParameter=2}">
<TextBlock Text="{Binding Col2}" />
</Grid>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>
</sdk:DataGrid.Columns>
</sdk:DataGrid>
,所有转换器的指标将做的是检查indexselected绑定属性是否等于参数(这是列的索引)
public class IndexToColorConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == parameter)
{
return new SolidColorBrush(Colors.Red);
}
return new SolidColorBrush(Colors.White);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
哇!我正在以完全错误的方式思考这个问题。谢谢!因为我们在网格中有16列,所以我将尝试为所有单元格使用一个单元格模板来减少冗余。我希望我可以不止一次地赞扬这一点。 – 2011-04-08 15:21:08