왜 당신을 viewmodel에 포함시키지 않습니까? 내가 무엇을 할 것인가 상호 작용의 중첩 된 열거 형 viewmodel을 만들 것입니다. 즉, DataGrid가 T의 IEnumerable에 바인딩되는 경우 T는 각 행을 나타내는 뷰 모델이고, id는 해당 viewmodel에서 IndexSelected와 같은 것을가집니다. 그런 다음 ID는 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 재산에 어떤 종류의 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 bound 속성이 매개 변수 (열의 인덱스)와 같은지 확인하는 것입니다.
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 개의 열이 있기 때문에 중복성을 줄이기 위해 모든 셀에 대해 하나의 셀 템플릿으로이 작업을 수행하려고합니다. 나는 이것을 한 번 이상 upvote 할 수 있으면 좋겠다. –