如何将GridViewColumn绑定到WPF中的Collection Item中的Property

时间:2016-02-01 08:50:40

标签: wpf gridview data-binding

我为GridView的GridViewColumn创建了一个附加属性来隐藏/显示整个列。

    <GridViewColumn att:Visibility.IsVisible="{Binding ...}">

只要附加属性绑定的属性存在于我的主视图模型(我的gridView的datacontext)中,它就可以工作。 在一种情况下,列的可见性取决于我的列表项的属性(集合中的项目是我的gridview的项目源)。 我怎么绑在这里? 我可以访问gridviewcolumn的单元格模板中的项属性,但不能访问gridviewcolumn本身。

我想要实现的是,我可以将附加属性绑定到列表项的属性。 有没有办法做到这一点?

编辑: 假设我有一个班级:

public class Item : INotifyPropertyChanged
{
  private string m_Text;
    public string Text
    {
        get
        {
            return m_Text;
        }
        set
        {
            m_Text= value;
            RaisePropertyChanged("Text");
        }
    }
    private bool m_IsVisible;
    public bool IsVisible
    {
        get
        {
            return m_IsVisible;
        }
        set
        {
            m_IsVisible = value;
            RaisePropertyChanged("IsVisible");
        }
    }
}

现在我将此类的ObservableCollection作为ListView / GridView的ItemsSource。

public ObservableCollection<Item> Items;

在我的xaml中:

<ListView ItemsSource={Binding Items}>
 <ListView.View>
  <GridView>
    <GridView.Columns>
     <GridViewColumn att:Visibility.IsVisible="{Binding /*What goes here? Should bind to IsVisible of my Collection Item*/}">
      <GridViewColumn.CellTemplate>
       <DataTemplate>
        <TextBlock Text={Binding Text"/>    
        </DataTemplate>
      </GridViewColumn.CellTemplate>
     </GridViewColumn>
    </GridView.Columns>
  </GridView>
 </ListView.View>
</ListView/>

我的gridviewcolumn的可见性现在应该取决于我的集合项的“IsVisible”的值。这件事有可能吗?

1 个答案:

答案 0 :(得分:0)

您可以将附加属性绑定到集合的IsVisible属性。我注意到您的xaml语法不正确导致编译错误。您的xaml应该是这样的。

 <ListView ItemsSource="{Binding Items}">
        <ListView.View>
            <GridView>
                <GridView.Columns>
                    <GridViewColumn att:Visibility.IsVisible="{Binding IsVisible}">
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <TextBlock Text="{Binding Text}"/>    
                            </DataTemplate>                              
                        </GridViewColumn.CellTemplate>                            
                    </GridViewColumn>                       
                </GridView.Columns>
            </GridView>
        </ListView.View>
    </ListView>

此外,您无需在INotifyPropertyChanged课程上实施Item。您的ObservableCollection已经实施INotifyCollectionChanged已经更新了用户界面。您的Item课程应该像这样

 public class Item
{
    public string Text { get; set; }
    public bool IsVisible { get; set; }
}