利用Silverlight DataGrid LoadingRow事件传入参数DataGridRowEventArgs

我们可以获取到Row对象She之其背景。

下面是一个简单示例

C#

using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Net;
using
System.Windows;
using
System.Windows.Controls;
using
System.Windows.Documents;
using
System.Windows.Input;
using
System.Windows.Media;
using
System.Windows.Media.Animation;
using
System.Windows.Shapes;
namespace
SilverlightApplication1
{
public
partial
class
MainPage : UserControl
{
public
MainPage()
{
InitializeComponent();
}
List
<
SourceModel
>
gridSources
=
new
List
<
SourceModel
>
();
private
void
UserControl_Loaded(
object
sender, RoutedEventArgs e)
{
}
private
void
LoadSource(
int
n)
{
if
(n
<
1
)
throw
new
Exception(
"
should >=1
"
);
gridSources.Clear();
for
(
int
i
=
0
; i
<
n; i
++
)
{
gridSources.Add(
new
SourceModel() { ID
=
i.ToString(), Name
=
"
test
"
+
i, Group
=
((
int
)(
new
Random().NextDouble()
*
i)).ToString() });
}
int
j
=
0
;
gridSources
=
gridSources.OrderBy(t
=>
t.Group).ToList();
gridSources.GroupBy(t
=>
t.Group).ToList().ForEach(t
=>
{
t.ToList().ForEach(k
=>
k.BG
=
brushs[j
%
brushs.Length]);
j
++
;
});
}
Brush[] brushs
=
new
Brush[] {
new
SolidColorBrush(Color.FromArgb(
128
,
135
,
206
,
235
)),
new
SolidColorBrush(Color.FromArgb(
255
,
240
,
255
,
240
)),
new
SolidColorBrush(Color.FromArgb(
140
,
255
,
97
,
0
)) };
private
void
test1_Click(
object
sender, RoutedEventArgs e)
{
dgSource.ItemsSource
=
gridSources;
}
 
private
void
test2_Click(
object
sender, RoutedEventArgs e)
{
}
private
void
LoadSource_Click(
object
sender, RoutedEventArgs e)
{
LoadSource(
int
.Parse(
this
.maxCount.Text));
}
private
void
dgSource_LoadingRow(
object
sender, DataGridRowEventArgs e)
{
e.Row.Background
=
(e.Row.DataContext
as
SourceModel).BG;
}
}
public
class
SourceModel
{
public
string
ID {
get
;
set
; }
public
string
Name {
get
;
set
; }
public
string
Group {
get
;
set
; }
public
Brush BG {
get
;
set
; }
}
}

XAMl:

<
UserControl
x:Class
="SilverlightApplication1.MainPage"
xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d
="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc
="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable
="d"
xmlns:data
="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"
d:DesignHeight
="300"
d:DesignWidth
="400"
xmlns:i
="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:sdk
="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"
xmlns:Test
="clr-namespace:SilverlightApplication1;assembly=SilverlightApplication1"
>
<
Grid
x:Name
="LayoutRoot"
>
<
Grid.RowDefinitions
>
<
RowDefinition
></
RowDefinition
>
<
RowDefinition
Height
="26"
></
RowDefinition
>
</
Grid.RowDefinitions
>
<
data:DataGrid
Grid.Row
="0"
x:Name
="dgSource"
Margin
="3,3,3,3"
RowBackground
="Black"
AutoGenerateColumns
="False"
LoadingRow
="dgSource_LoadingRow"
>
<
data:DataGrid.Columns
>
<
data:DataGridTextColumn
Header
="ID"
Binding
="
{Binding ID}
"
IsReadOnly
="True"
/>
<
data:DataGridTextColumn
Header
="Name"
Binding
="
{Binding Name,Mode=TwoWay}
"
/>
<
data:DataGridTextColumn
Header
="Group"
Binding
="
{Binding Group,Mode=TwoWay}
"
/>
<
data:DataGridTextColumn
Header
="ID"
Binding
="
{Binding ID}
"
IsReadOnly
="True"
/>
<
data:DataGridTextColumn
Header
="Name"
Binding
="
{Binding Name,Mode=TwoWay}
"
/>
<
data:DataGridTextColumn
Header
="Group"
Binding
="
{Binding Group,Mode=TwoWay}
"
/>
<
data:DataGridTextColumn
Header
="ID"
Binding
="
{Binding ID}
"
IsReadOnly
="True"
/>
<
data:DataGridTextColumn
Header
="Name"
Binding
="
{Binding Name,Mode=TwoWay}
"
/>
<
data:DataGridTextColumn
Header
="Group"
Binding
="
{Binding Group,Mode=TwoWay}
"
/>
</
data:DataGrid.Columns
>
</
data:DataGrid
>
<
StackPanel
Orientation
="Horizontal"
Grid.Row
="1"
>
<
TextBox
x:Name
="maxCount"
Width
="300"
Text
="100000"
></
TextBox
>
<
Button
x:Name
="loadSource1"
Click
="LoadSource_Click"
Content
="Load Source"
/>
<
Button
x:Name
="test1"
Click
="test1_Click"
Content
="Test bind"
/>
<
Button
x:Name
="test2"
Click
="test2_Click"
Content
="Test 2"
/>
</
StackPanel
>
</
Grid
>
</
UserControl
>