【问题标题】:Binding failed for a GridViewColumn Visibility propertyGridViewColumn Visibility 属性的绑定失败
【发布时间】:2014-08-09 19:14:20
【问题描述】:
    <ListView Grid.Row="1" Margin="10" Name="lvRegistersConfig" ItemsSource="{Binding registers}">
        <ListView.Resources>
            <local:BoolToVisibility x:Key="BTVConverter"/>
        </ListView.Resources>
        <ListView.View>
            <GridView>
                <local:GridViewColumnExt Header="Register Name" Width="100" Visibility="{Binding Vis, Converter={StaticResource BTVConverter}}" >
                    <local:GridViewColumnExt.CellTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding Name}" Visibility="{Binding Vis, Converter={StaticResource BTVConverter}}"/>
                        </DataTemplate>
                    </local:GridViewColumnExt.CellTemplate>
                </local:GridViewColumnExt>
            </GridView>
        </ListView.View>
    </ListView>

GridViewColumnExt 是继承自 GridViewColumn 并添加 Visibility 属性的类。

如您所见,我的 ListView 的 ItemsSource 设置为寄存器 ObservableCollection。 Register 类有一个名为 Vis 的 bool 类型的属性。 这一切都适用于文本框,但从 GridViewColumnExt 不,我想我无法到达集合并绑定到特定对象。

我不确定 GridViewColumn 的 DataContext 是什么,我看到我无法设置它。 我需要一个提示,我的 GridViewColumn 如何从寄存器 ObservableCollection 中的 Register 对象中看到 Vis 属性?

【问题讨论】:

  • 基于单个项目的属性为整个列添加可见性绑定没有任何意义。如果第 1 项的 Vis = true 而第 2 项的 Vis = false,你是否隐藏整列?
  • @user3910810 如果该列上存在任何项目,我将显示它。我在扩展器中有我的 ListView,我正在检查扩展事件。

标签: c# wpf data-binding


【解决方案1】:

我不确定GridViewColumnExt 控件是如何工作的,但在您的XAML 中,DataContext 看起来不会是registers 集合中的单个项目,而是相同的DataContext在其上声明了 registers 集合。因此,您可能无法使用 Register.Vis 属性控制列的可见性。

如果您希望在单元格模板中添加更多内容,可以将TextBlock 包装在Grid 中,并将Grid.Visibility 属性绑定到Register.Vis 属性。

这有意义吗?

【讨论】:

    猜你喜欢
    • 2013-12-19
    • 2013-06-09
    • 2017-09-14
    • 2019-05-12
    • 2011-07-06
    • 2021-12-05
    • 1970-01-01
    • 2013-10-04
    • 1970-01-01
    相关资源
    最近更新 更多