我要解决的一般问题是只有一个数据模板用于复选框,然后我可以将其用于列表视图中的许多不同列(使用网格视图)。在所有示例中,我都看到为每个绑定创建了一个单独的模板,这对我来说似乎有点矫枉过正。
我一直在尝试通过创建 gridviewcolumn 将设置的附加属性来做到这一点。然后我可以简单地为绑定到该附加属性的复选框提供一个数据模板。
我遇到的问题实际上是将复选框源设置为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>
PS Attached 属性工作正常,我已将其直接附加到复选框并使用相对源自绑定并获得了通过的值,但是当我尝试将其绑定到 GridViewColumn 时,我没有得到任何快乐,事实上我没有也无法绑定到 GridViewColumn 上的标题...
PPS 我也尝试过其他绑定源表达式(只是看起来不正确)...
编辑:发布此消息后,我立即意识到 GridViewColumn 存在于所有行中,所以这可能就是为什么这不起作用?!
我现在睡在上面,并意识到以这种方式做事是行不通的(因为 GridViewColumn 只能保存第一行的值,而不是我需要的每一行的值) - 但是我仍然认为有可能绑定到 GridViewColumn?
这是一个仅用于显示行为的 xaml 示例:
<Window x:Class="WpfApplication3.MainWindow"
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>
在这样的场景下,我希望在每个“可见行”文本上方看到“标题”