我的ListView有问题。我将ItemsSource绑定到我的ViewModel,但是我希望将某个属性设置为null的项完全折叠(因为整个项目已折叠,而不仅仅是绑定了可能为null的属性的控件)。我有一个可用的转换器,但ListView似乎仍然保留至少一些空间用于折叠的项目。这导致我的ListView有丑陋的"漏洞"。 (请注意,这些洞不会占用与可见物品一样多的空间,但它们确实占用了一些空间,并且“不可见的物品甚至可以点击......”
我的问题与此处所述的问题几乎相同:Not showing items with Visibility=Collapsed in Windows 8.1 GridView
困扰我的唯一问题是链接问题的OP说,对他来说,它在Windows Phone中运行良好但在Windows中运行不正常。对我而言,它不适用于Windows Phone。有什么建议我可以做什么?
守则:
<DataTemplate x:Key="UpcomingEpisodesTemplate">
<Grid Visibility="{Binding Upcoming, Converter={StaticResource EpisodeVisibilityConverter}}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="110"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
....The rest of the template which is not important...
</Grid>
</DataTemplate>
谢谢!
答案 0 :(得分:1)
我已经搜索了2天来从容器样式中删除没有剩余占位符的项目,这似乎有效(WinRT 8.1)。
(Key_Up Event from TextBox)
foreach (YourType element in TheListViewZoomedIn.Items)
{
if (!element.YourProperty.Contains(ListSearchBox.Text))
(TheListViewZoomedIn.ContainerFromItem(element) as ListViewItem).Visibility = Visibility.Collapsed;
}
它可能不是超级优雅或可行的大型列表,但它完成工作,并提供大量的控制。只需确保在需要的位置再次设置可见性。
我只想分享一下 - 未来可能对其他人有所帮助,
最好的问候, 斯蒂芬
答案 1 :(得分:0)
您可以尝试转换绑定到ItemsSource的任何内容。像这样:
<ListView
ItemsSource={Binding MyList, Converter={StaticResource MyListConverter}}>
使用这样的转换器。
public class MyListConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
return ((IEnumerable<MyType>)value).Where(x => x.MyProperty != null);
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
return null;
}
}
使用ObservableCollection进行编辑。
public class MyListConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
var originalObservable = (ObservableCollection<MyType>)value;
var collection = new ObservableCollection<MyType>();
collection.AddRange(originalObservable.Where(x => x.MyProperty != null));
originalObservable.CollectionChanged += delegate { collection.Clear(); collection.AddRange(originalObservable.Where(x => x.MyProperty != null)); };
return collection;
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
return null;
}
}
答案 2 :(得分:0)
如果它有帮助,您可以通过将ItemContainerStyle更改为自定义样式(编辑默认样式的副本)并更改: -
,使用Collapsed ListViewItems的额外空格来解决此问题<Setter Property="MinWidth" Value="{ThemeResource ListViewItemMinWidth}"/>
<Setter Property="MinHeight" Value="{ThemeResource ListViewItemMinHeight}"/>
要
<Setter Property="MinWidth" Value="0"/>
<Setter Property="MinHeight" Value="0"/>