(精华)2020年02月08日 WPF课程管理系统项目实战(首页界面-ItemsControl的使用)

128 阅读1分钟

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>