我为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”的值。这件事有可能吗?
答案 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; }
}