繁体   English   中英

如何为DataGrid优化代码

[英]How to optimize code for datagrid

我想在我的应用程序中重复这种设计。

http://imageshack.us/photo/my-images/651/50171626.jpg/

我写了这段代码。

public class CellViewModel
{
    public string Background { get; set; }

    public string FontWeight { get; set; }

    public string Foreground { get; set; }

    public string Value { get; set; }
}

DataGridCell的ViewModel


public class PerformanceItemViewModel
{
    public CellViewModel Title { get; set; }

    public CellViewModel AllTrades { get; set; }

    public CellViewModel LongTrades { get; set; }

    public CellViewModel ShortTrades { get; set; }

    public CellViewModel BuyAndHold { get; set; }
}

public class PerformanceViewModel
{
    public PerformanceViewModel()
    {
        this.Items = new ObservableCollection<PerformanceItemViewModel>
            {
                new PerformanceItemViewModel
                    {
                        Title = new CellViewModel { Value = "Net Profit", FontWeight = "Bold", Foreground = "Black", Background = "White" },
                        AllTrades = new CellViewModel { Value = "-683,84", FontWeight = "Normal", Foreground = "Red", Background = "White" },
                        LongTrades = new CellViewModel { Value = "-683,84", FontWeight = "Normal", Foreground = "Red", Background = "White" },
                        ShortTrades = new CellViewModel { Value = "0,00", FontWeight = "Normal", Foreground = "Black", Background = "White" },
                        BuyAndHold = new CellViewModel { Value = "-2010,00", FontWeight = "Normal", Foreground = "Red", Background = "White" }
                    }
            };
    }

    public ObservableCollection<PerformanceItemViewModel> Items { get; set; }
}

我想优化此代码。

主要问题是如何通知DataGrid有关Background,FontWeight,Foreground的信息?


<Grid>
    <datagrid:ThemedDataGrid AlternatingRowBackground="{Binding Background}"
                             AutoGenerateColumns="False"
                             GridLinesVisibility="None"
                             HeadersVisibility="Column"
                             IsHitTestVisible="False"
                             IsReadOnly="True"
                             ItemsSource="{Binding Performance.Items}">

        <datagrid:ThemedDataGrid.CellStyle>
            <Style TargetType="DataGridCell">
                <Setter Property="BorderThickness" Value="0" />
            </Style>
        </datagrid:ThemedDataGrid.CellStyle>

        <datagrid:ThemedDataGrid.Columns>
            <DataGridTextColumn Binding="{Binding Path=Title.Value}">
                <DataGridTextColumn.CellStyle>
                    <Style TargetType="DataGridCell">
                        <Setter Property="Background" Value="{Binding Path=Title.Background}" />
                        <Setter Property="FontWeight" Value="{Binding Path=Title.FontWeight}" />
                        <Setter Property="Foreground" Value="{Binding Path=Title.Foreground}" />
                    </Style>
                </DataGridTextColumn.CellStyle>
            </DataGridTextColumn>
            <DataGridTextColumn Header="All Trades" Binding="{Binding Path=AllTrades.Value}">
                <DataGridTextColumn.CellStyle>
                    <Style TargetType="DataGridCell">
                        <Setter Property="Background" Value="{Binding Path=AllTrades.Background}" />
                        <Setter Property="FontWeight" Value="{Binding Path=AllTrades.FontWeight}" />
                        <Setter Property="Foreground" Value="{Binding Path=AllTrades.Foreground}" />
                    </Style>
                </DataGridTextColumn.CellStyle>
            </DataGridTextColumn>
            <DataGridTextColumn Header="Long Trades" Binding="{Binding Path=LongTrades.Value}">
                <DataGridTextColumn.CellStyle>
                    <Style TargetType="DataGridCell">
                        <Setter Property="Background" Value="{Binding Path=LongTrades.Background}" />
                        <Setter Property="FontWeight" Value="{Binding Path=LongTrades.FontWeight}" />
                        <Setter Property="Foreground" Value="{Binding Path=LongTrades.Foreground}" />
                    </Style>
                </DataGridTextColumn.CellStyle>
            </DataGridTextColumn>
            <DataGridTextColumn Header="Short Trades" Binding="{Binding Path=ShortTrades.Value}">
                <DataGridTextColumn.CellStyle>
                    <Style TargetType="DataGridCell">
                        <Setter Property="Background" Value="{Binding Path=ShortTrades.Background}" />
                        <Setter Property="FontWeight" Value="{Binding Path=ShortTrades.FontWeight}" />
                        <Setter Property="Foreground" Value="{Binding Path=ShortTrades.Foreground}" />
                    </Style>
                </DataGridTextColumn.CellStyle>
            </DataGridTextColumn>
            <DataGridTextColumn Header="Buy And Hold" Binding="{Binding Path=BuyAndHold.Value}">
                <DataGridTextColumn.CellStyle>
                    <Style TargetType="DataGridCell">
                        <Setter Property="Background" Value="{Binding Path=BuyAndHold.Background}" />
                        <Setter Property="FontWeight" Value="{Binding Path=BuyAndHold.FontWeight}" />
                        <Setter Property="Foreground" Value="{Binding Path=BuyAndHold.Foreground}" />
                    </Style>
                </DataGridTextColumn.CellStyle>
            </DataGridTextColumn>
        </datagrid:ThemedDataGrid.Columns>
    </datagrid:ThemedDataGrid>
</Grid>

但是不幸的是,这段代码非常麻烦。

也许您有一些改进的想法?

WPF中的DataGrid支持分组,请看一下本文如何:在DataGrid控件中对数据进行分组,排序和筛选 MSDN上同样是非常相似您的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM