我有一个ItemsSource
这样设置的DataGrid :
TheGrid.ItemsSource = items;
还有一个XAML:
<DataGrid Name="TheGrid" AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="False">
<DataGrid.Resources>
<Style.Setters>
<Setter Property = "Background" Value="{Binding = ???}" ></Setter>
</Style.Setters>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTextColumn Header="Id" Binding="{Binding Id}"/>
<DataGridTextColumn Header="Time" Binding="{Binding Time}"/>
...
</DataGrid.Columns>
</DataGrid>
现在,在我看来,我有这样的公共词典:
public IDictionary<string, Color> IdColors { get; set; }
问题是我不知道如何从我的ID中获取IDItemsSource
并将其传递到绑定中,这样它将访问该ID上的字典并采用颜色。我已阅读替代解决方案,例如:
在转换器中执行此操作
订阅LoadingRow
并以编程方式将其设置在那里
我想我知道该怎么做#2了,但我来问问堆栈是否明智。
如果要定义转换器,则可以采用以下方式:
public class IdToBrushConverter : IValueConverter {
/// <summary>
/// Converts an ID into a Brush
/// </summary>
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
return new SolidColorBrush(IdColors[value]); //need for example some static access to IdColors here
//You can also define IdColors here or use other custom logic.
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
throw new NotImplementedException();
}
}
在XAML中,您可以像这样调用转换器:
<DataGrid Name="TheGrid" AutoGenerateColumns="False" CanUserAddRows="False CanUserDeleteRows="False">
<DataGrid.Resources>
<!--You might need some namespace prefix here-->
<view:IdToBrushConverter x:Key="IdToBrushConverter"></view:IdToBrushConverter>
<Style.Setters>
<Setter Property = "Background" Value="{Binding Path=Id, Converter={StaticResource IdToBrushConverter}" ></Setter>
</Style.Setters>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTextColumn Header="Id" Binding="{Binding Id}"/>
<DataGridTextColumn Header="Time" Binding="{Binding Time}"/>
...
</DataGrid.Columns>
</DataGrid>
该转换器将被调用并应用于该Id
属性,并返回SolidColorBrush
具有所需颜色的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句