我有一個數組byte[][] colourMapping
,我想操縱一個DataGrid,以便它綁定到數組(但不是傳統意義上的,我相信)。我不想在網格中顯示數組的內容,而是想根據數組的值更改特定的單元格背景(我希望單元格本身爲空)。例如,如果colourMapping [0] [0] == 27,那麼我希望數據網格在[0] [0]的單元格具有特定的顏色背景。DataGrid後臺綁定到鋸齒陣列
此外,隨着數組值的變化,我想數據網格的背景相應地改變。
我知道這是一個普遍的問題,但我該怎麼做呢?
更新:
這是我目前有。它填補了與字節自己一個DataGrid(這是我想避免的),似乎並沒有設置背景:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
//mt.BinaryMapping is a byte[][]
dataGrid1.ItemsSource = BindingHelper.GetBindable2DViewFromIList<byte>(mt.BinaryMapping);
}
private void dataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
DataGridTextColumn column = e.Column as DataGridTextColumn;
Binding binding = column.Binding as Binding;
binding.Path = new PropertyPath(binding.Path.Path + ".Value");
}
}
public class Ref<T>
{
private readonly Func<T> getter;
private readonly Action<T> setter;
public Ref(Func<T> getter, Action<T> setter)
{
this.getter = getter;
this.setter = setter;
}
public T Value { get { return getter(); } set { setter(value); } }
}
public class BindingHelper
{
public static DataView GetBindable2DViewFromIList<T>(IList list2d)
{
DataTable dataTable = new DataTable();
for (int i = 0; i < ((IList)list2d[0]).Count; i++)
{
dataTable.Columns.Add(i.ToString(), typeof(Ref<T>));
}
for (int i = 0; i < list2d.Count; i++)
{
DataRow dataRow = dataTable.NewRow();
dataTable.Rows.Add(dataRow);
}
DataView dataView = new DataView(dataTable);
for (int i = 0; i < list2d.Count; i++)
{
for (int j = 0; j < ((IList)list2d[i]).Count; j++)
{
int a = i;
int b = j;
Ref<T> refT = new Ref<T>(() => (list2d[a] as IList<T>)[b], z => { (list2d[a] as IList<T>)[b] = z; });
dataView[i][j] = refT;
}
}
return dataView;
}
}
public class ColorConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
byte s = (byte)value;
if (s == 255)
{
return Brushes.DeepPink;
}
else if (s == 237)
{
return Brushes.Blue;
}
else
{
return Brushes.White;
}
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotSupportedException();
}
}
而且這裏是我的DataGrid,顯示在細胞中的字節(不可取行爲,但管理),並且似乎無法正確設置背景色:
<DataGrid AutoGenerateColumns="True" AutoGeneratingColumn="dataGrid_AutoGeneratingColumn" HorizontalAlignment="Left" Margin="6,6,0,0" Name="dataGrid1"
VerticalAlignment="Top" HeadersVisibility="None" RowHeaderWidth="0" ColumnHeaderHeight="0" IsReadOnly="True" HorizontalScrollBarVisibility="Disabled"
VerticalScrollBarVisibility="Disabled" SelectionMode="Extended" SelectionUnit="Cell">
<DataGrid.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="Background" Value="{Binding Path=Content, Converter={StaticResource ColorConverter}}" />
</Style>
</DataGrid.CellStyle>
</DataGrid>
你是否在某個地方開始工作或者您是否要求我們爲您完成這項工作? –
您需要在背景上設置一個DataGrid.CellStyle,其背景值爲 Value = {Binding Path =。 ,轉換器= {StaticResource SomeHexToBrushConverter –
@devhedgehog我已經更新我的問題,我到目前爲止 –