当前位置: 首页 > 知识库问答 >
问题:

如何从gridviewcolumn的celltemplate绑定到其属性

顾承平
2023-03-14

我想解决的一般问题是,一个复选框只有一个datatemplate,然后我可以将它用于listview中的许多不同列(使用gridview)。在我所见过的所有示例中,每个绑定都创建了一个分离模板,这对我来说似乎有些过头了。

我一直试图通过创建gridviewcolumn将设置的附加属性来实现这一点。然后,我可以简单地为绑定到附加属性的复选框设置一个datatemplate。

我遇到的问题实际上是将复选框源设置为GridViewColumn。

下面是XAML:

<DataTemplate x:Key="CheckBoxTemplate">
    <CheckBox IsChecked="{Binding Path=(ap:AttachedProperties.IsChecked),
        RelativeSource={RelativeSource AncestorType={x:Type GridViewColumn}}}" />
</DataTemplate>

<GridView x:Key="MyGridView">
    <GridViewColumn Header="CheckBox" CellTemplate="{StaticResource CheckBoxTemplate}" ap:AttachedProperties.IsChecked="{Binding Path=SomeValue}" />
</GridView>

附言。Attached属性工作正常,我已经将它直接附加到复选框,并使用Relationvesource自绑定并获得了值,但当我试图将它绑定到GridViewColumn上时,我没有得到快乐,事实上,我也无法绑定到GridViewColumn上的标头...

下面是一个仅用于显示行为的xaml示例:

<Window x:Class="WpfApplication3.MainWindow"
       html" target="_blank">xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
       Title="MainWindow"
       Width="525"
       Height="350">
   <Grid>
       <ListView Name="listView1"
                 Width="479"
                 Height="287"
                 Margin="12,12,0,0"
                 HorizontalAlignment="Left"
                 VerticalAlignment="Top">
           <ListView.View>
               <GridView>
                   <GridViewColumn Header="A Header">
                       <GridViewColumn.CellTemplate>
                           <DataTemplate>
                               <StackPanel>
                                   <TextBlock Text="{Binding Path=Header, RelativeSource={RelativeSource AncestorType={x:Type GridViewColumn}}}" />
                                   <TextBlock Text="Visible row" />
                               </StackPanel>
                           </DataTemplate>
                       </GridViewColumn.CellTemplate>
                   </GridViewColumn>
               </GridView>
           </ListView.View>
           <ListViewItem />
           <ListViewItem />
       </ListView>
   </Grid>
</Window>

在这样的场景下,我希望看到“一个标题”就在每个“可见行”文本的上方

共有1个答案

江嘉悦
2023-03-14

我已经检查了snoop,这是因为GridColumnHeader不在GridRows所在的VisualTree中。我的解决方案是使用ElementName并将其绑定到Header属性。相当简单,更干净和可读性。

    <ListView Name="listView1"
             Width="479"
             Height="287"
             Margin="12,12,0,0"
             HorizontalAlignment="Left"
             VerticalAlignment="Top">
        <ListView.View>
            <GridView>
                <GridViewColumn Header="A Header" x:Name="HeaderOne">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <StackPanel>
                                <TextBlock Text="{Binding ElementName=HeaderOne,Path=Header}" />
                                <TextBlock Text="Visible row" />
                            </StackPanel>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
            </GridView>
        </ListView.View>
        <ListViewItem />
        <ListViewItem />
    </ListView>
 类似资料:
  • 我试图将子类属性绑定到GridViewColumn。我有一个母类M1和三个不同的子类S1、S2和S3。GridViewColumn由类M1的对象填充。我希望将S2的一个属性绑定到这个GridViewColumn的头,而M1中没有实现这个属性。 有人能给我解释一下怎么做吗?

  • 在我的XAML中: 我的gridviewcolumn的可见性现在应该取决于我的集合项的“isVisible”的值。那件事可能吗?

  • 最好的办法是什么?根据显示的数据,我希望绑定到MyText1或MyText2。我怎么做“开关”?

  • GridViewColumnExt是从GridViewColumn继承并添加可见性属性的类。 您可能会看到,我的ListView的ItemsSource被设置为寄存器ObservableCollection。Register类有一个名为vis的bool类型的属性。对于TextBox来说,这一切都很好,但是从GridViewColumnExt don来看,我认为我无法到达集合并绑定到特定的对象。 我

  • 我得到了这个错误 属性内的内插已被删除。改用v-bind或冒号速记。例如,代替

  • 假设我有一个非常大的单元格网格,我想添加数据行和数据集合值,并从模型绑定。如何从angular2(Dart中的beta0)绑定数据行。 绑定的数据行= " {{boundVal}}”似乎并不 例如。