【问题标题】:ListView ItemContainerStyle TemplateListView ItemContainerStyle 模板
【发布时间】:2010-10-28 13:47:17
【问题描述】:

我创建了用作 ListView 项目模板的样式,其中包含一个 CheckBox 和一个 TextBlock:

<Style x:Key="CheckBoxListStyle" TargetType="{x:Type ListView}">
            <Setter Property="SelectionMode" Value="Multiple"></Setter>
            <Setter Property="ItemContainerStyle">
                <Setter.Value>
                    <Style TargetType="{x:Type ListViewItem}" >
                        <Setter Property="Template">
...

模板中的复选框绑定到列表视图项的 IsSelected 属性:

<CheckBox x:Name="itemCheckBox" Width="13" Height="13" Focusable="False" IsChecked="{Binding Path=IsSelected, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}">

并且文本块的文本绑定到列表视图项的来源的Value属性:

<TextBlock x:Name="textBlock" Padding="5,0,0,0" HorizontalAlignment="Stretch">
  <ContentPresenter Content="{Binding Path=Value}"/>
</TextBlock>

我列表中的每个项目都是一个包含两个属性的对象,ValueIsChecked。我要做的是将对象的 IsChecked 属性绑定到列表视图项的 IsSelected 属性。但是,我不知道如何从 ListViewItem 模板中访问对象的 IsChecked 属性。

将文本块的内容绑定到对象的 Value 属性没有任何问题,但是如果我希望对象的 IsChecked 属性绑定到的 IsSelected 属性,我什至会将绑定定义放在哪里列表视图项?

【问题讨论】:

    标签: wpf wpf-controls binding


    【解决方案1】:

    每个 ListViewItem 的 DataContext 应在由父 ListView 创建时设置为项目数据,以便您可以使用:

    <Style TargetType="{x:Type ListViewItem}" >
        <Setter Property="IsSelected" Value="{Binding IsChecked}">
        ...
    </Style>
    

    【讨论】:

    • 谢谢,效果很好。现在想起来似乎很简单。
    猜你喜欢
    • 2020-01-03
    • 2018-11-08
    • 1970-01-01
    • 2012-06-10
    • 2020-01-05
    • 1970-01-01
    • 2016-06-28
    • 2017-04-24
    • 2019-09-24
    相关资源
    最近更新 更多