在WPF ListView c#窗口中更改外观行

时间:2018-02-20 15:50:35

标签: c# wpf data-binding

在我的Windows应用程序中,我定义了一个带有列表的窗口。此列表中的项目基于活页夹(目前我以编程方式放入项目)。

<ListView x:Name="event_list" IsEnabled="False">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Type" DisplayMemberBinding="{Binding Path=Type}"/>
            <GridViewColumn Header="Description" DisplayMemberBinding="{Binding Path=Description}"/>
        </GridView>
    </ListView.View>
</ListView>

var row = new { Type = "type", Description = "description" };
event_list.Items.Add(row);

假设我想更改第3行并使字体粗体变粗,我该如何实现?

显然,以下内容无法编译:

event_lits.Items[2].FontWeight = FontWeights.Bold;

因为Items属性只返回我放入的字符串,而不是行本身的视图对象。

渴望回答者的说明:  在wpf窗口中,ListView是this类,而不是this类(这个主题的9/10 google搜索失败的原因)。

1 个答案:

答案 0 :(得分:3)

您可以添加一个ItemContainerStyle,其DataTrigger绑定到数据对象的属性:

<ListView x:Name="event_list" IsEnabled="False">
    <ListView.ItemContainerStyle>
        <Style TargetType="ListViewItem">
            <Style.Triggers>
                <DataTrigger Binding="{Binding IsBold}" Value="True">
                    <Setter Property="FontWeight" Value="Bold" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ListView.ItemContainerStyle>
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Type" DisplayMemberBinding="{Binding Path=Type}"/>
            <GridViewColumn Header="Description" DisplayMemberBinding="{Binding Path=Description}"/>
        </GridView>
    </ListView.View>
</ListView>

示例数据:

event_list.Items.Add(new { Type = "type", Description = "description" });
event_list.Items.Add(new { Type = "type", Description = "description" });
event_list.Items.Add(new { Type = "type", Description = "description", IsBold = true });
event_list.Items.Add(new { Type = "type", Description = "description" });

在WPF中,通常不应在代码隐藏中设置可视容器的属性。