【问题标题】:Datatemplate binding数据模板绑定
【发布时间】:2010-06-08 21:23:32
【问题描述】:

我怎样才能实现这样的目标:

<ListView Name="OverviewTitlesListView" ItemsSource="{Binding OverviewTitlesCollection}">
                <ListView.View>
                    <GridView>
                        <GridViewColumn Header="Index" Width="60" DisplayMemberBinding="{Binding TitleIndex}"/>
                        <GridViewColumn Header="Start Time" Width="100" DisplayMemberBinding="{Binding StartTime}"/>
                        <GridViewColumn Header="End Time" Width="100" DisplayMemberBinding="{Binding EndTime}"/>
                        <GridViewColumn Header="Title Text" Width="550" DisplayMemberBinding="{Binding Text}"/>
                        <GridViewColumn Header="Approved" Width="80">
                            <GridViewColumn.CellTemplate>
                                <DataTemplate>
                                    <TextBlock Name="Test"/>
                                    <DataTemplate.Triggers>
                                        <Trigger Property="{Binding IsApproved}" Value="true">
                                            <Setter TargetName="Test" Property="Text" Value="Approved"/>
                                        </Trigger>
                                        <Trigger Property="{Binding IsApproved}" Value="false">
                                            <Setter TargetName="Test" Property="Text" Value="Not Approved"/>
                                        </Trigger>
                                    </DataTemplate.Triggers>
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
                        </GridViewColumn>
                    </GridView>
                </ListView.View>
            </ListView>

当我在 OverviewTitlesCollection 中的对象的 IsApproved 属性发生更改时,我想控制 TextBlock 的文本。如何通过我的数据模板中的触发器来控制它?

【问题讨论】:

    标签: wpf


    【解决方案1】:

    将您的 DataTemplate 更改为:

    <DataTemplate>
        <TextBlock x:Name="Test" Text="Approved"/>
        <DataTemplate.Triggers>
            <DataTrigger Binding="{Binding IsApproved}" Value="False">
                <Setter TargetName="Test" Property="Text" Value="Not Approved"/>
            </DataTrigger>
        </DataTemplate.Triggers>
    </DataTemplate>
    

    它现在使用 DataTrigger 来检查绑定,而不是仅支持模板化对象(如控件)上的单个属性的触发器。我还将它简化为使用默认值和单个触发器来来回切换。当触发器变为非活动状态时,它将切换回原始状态(Text="Approved")。

    【讨论】:

      【解决方案2】:

      只要您的 IsApproved 属性引发 INotifyPropertyChanged,那么您的 DataTrigger 就可以工作。

      并使用&lt;DataTrigger Binding="{Binding IsApproved}". .. 代替触发器

      【讨论】:

      • 我只是通过这段代码得到一个“无效的 XML”。它无法弄清楚 {Binding IsApproved},使用 {TemplateBinding IsApproved} 它说:在“控制”类型中找不到属性“IsApproved”
      猜你喜欢
      • 2021-12-25
      • 2011-04-30
      • 2014-08-23
      • 1970-01-01
      • 2013-05-23
      • 1970-01-01
      • 2012-01-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多