1.后台相关代码
public class BoolToArrowConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value != null && bool.Parse(value.ToString()))
{
return "↑";
}
return "↓";
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
public class BoolToBrushConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value != null && bool.Parse(value.ToString()))
{
return Brushes.LightGreen;
}
return Brushes.Red;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
private int _itemCount;
public int ItemCount
{
get { return _itemCount; }
set { _itemCount = value; this.DoNotify(); }
}
public ObservableCollection<CourseSeriesModel> CourseSeriesList { get; set; } = new ObservableCollection<CourseSeriesModel>();
private void InitCourseSeries()
{
var cList = LocalDataAccess.GetInstance().GetCoursePlayRecord();
this.ItemCount = cList.Max(c => c.SeriesList.Count);
foreach (var item in cList)
this.CourseSeriesList.Add(item);
}
2.数据遍历代码
<UserControl.Resources>
<converter:BoolToArrowConverter x:Key="BoolToArrowConverter"/>
<converter:BoolToBrushConverter x:Key="BoolToBrushConverter"/>
</UserControl.Resources>
<ItemsControl ItemsSource="{Binding CourseSeriesList}" Grid.Row="1">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border Background="White" CornerRadius="10" Margin="0,5">
<Border.Effect>
<DropShadowEffect Color="Gray" ShadowDepth="0" BlurRadius="10" Opacity="0.2" Direction="0"/>
</Border.Effect>
<Grid Height="70">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition Width="3.5*"/>
</Grid.ColumnDefinitions>
<Border BorderBrush="#DDD" BorderThickness="0,0,1,0" Margin="0,10"/>
<Border BorderBrush="#DDD" BorderThickness="0,0,1,0" Margin="0,10" Grid.Column="1"/>
<TextBlock Text="{Binding CourseName}" VerticalAlignment="Center" HorizontalAlignment="Center" Foreground="#444"/>
<lvc:PieChart Grid.Column="1" LegendLocation="Right" InnerRadius="15" Margin="0,0,15,0"
Series="{Binding SeriesColection}">
<lvc:PieChart.ChartLegend>
<lvc:DefaultLegend BulletSize="10"/>
</lvc:PieChart.ChartLegend>
<lvc:PieChart.DataTooltip>
<lvc:DefaultTooltip BulletSize="10"/>
</lvc:PieChart.DataTooltip>
</lvc:PieChart>
<ItemsControl Grid.Column="2" ItemsSource="{Binding SeriesList}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="{Binding DataContext.ItemCount,RelativeSource={RelativeSource AncestorType=UserControl,Mode=FindAncestor}}"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid VerticalAlignment="Center" HorizontalAlignment="Center">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition MinHeight="24"/>
<RowDefinition MinHeight="24"/>
</Grid.RowDefinitions>
<TextBlock Text="{Binding SeriesName}" VerticalAlignment="Center"/>
<TextBlock Text="{Binding CurrentValue}" Grid.Row="1" VerticalAlignment="Center"/>
<TextBlock Text="{Binding IsGrowing,Converter={StaticResource BoolToArrowConverter}}"
Grid.Column="1" VerticalAlignment="Center" Margin="10,0,0,0"
Foreground="{Binding IsGrowing,Converter={StaticResource BoolToBrushConverter}}"/>
<TextBlock Text="{Binding ChangeRate,StringFormat=\{0\}%}" Grid.Column="1" Grid.Row="1"
VerticalAlignment="Center" Margin="10,0,0,0"
Foreground="{Binding IsGrowing,Converter={StaticResource BoolToBrushConverter}}"
/>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>