2012-07-24 70 views
6

我有一种情况,我显示一组PivotItem和(根据情况)最喜欢的一个。是否可以隐藏(而不是删除)PivotItem?

当包含我的收藏夹的列表为空时,我需要能够隐藏这个支点 - 但是当有东西出现时它需要显示。现在

,我可以只是将其删除,但对于这样的场景:

  1. 转到枢轴视图(不喜欢的支点,因为该列表是空的)
  2. 转到之一剩下的PivotItem s并选择一个项目。
  3. 在其自己的视图中选择该项目作为收藏
  4. 点击后退按钮并返回到数据透视图。

现在不会有收藏中心,这只是不够好。

我曾试图与能见度删除=“隐藏”,但VS抱怨没有正确指定的数据上下文(它是)

任何想法?

回答

3

为了响应用户事件,为什么不在代码中动态添加和删除PivotItem? 用户添加收藏夹 - >创建并添加数据透视项目。 用户删除他上次收藏的项目 - >删除数据透视项目。

+0

临屋获得的转换器t是一个好主意,但是在代码隐藏方面,数据透视项有点难以重新创建(至少需要不合理数量的代码)。不过,我想我可以删除它,存储并在稍后恢复。 – 2012-07-24 10:44:31

+1

你可以在'InitializeComponent'调用后立即删除它。这样用户不应该注意到它。另一种可能性是在“资源”部分中为数据透视表项创建XAML用户界面,并从那里检索它。 – 2012-07-24 11:00:57

+0

是的。但是没有办法“隐藏”它而不是动态添加和删除它? – 2012-07-24 11:06:07

0

我想你会有一个该枢纽项目中的收藏夹列表,所以我的做法是将透视项目的可见性绑定到列表的isEmpty属性。

例如,视图将是

<PivotItem 
    Visibility="{Binding IsNotEmpty, 
    Converter={StaticResource VisibilityConverter}}"/> 

,并在视图模型

ICollectionView ItemsSource; 
... 
public bool IsNotEmpty(){  
    return !ItemsSource.IsEmpty; 
} 

最后,

public class BooleanToVisibilityConverter : IValueConverter { 

public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
{ 
    if(value == null) 
     return Visibility.Collapsed; 
    var isVisible = (bool)value; 
    return isVisible ? Visibility.Visible : Visibility.Collapsed; 
} 
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
{ 
    var visiblity = (Visibility)value; 
    return visiblity == Visibility.Visible; 
}} 

转换器从Useful Converters

+0

不幸的是,正如我在我原来的问题中提到的,这是我最初尝试做的。这不起作用。感谢您花时间写出非常体面的答案。 – 2012-07-26 07:22:48

+0

您能否添加关于Visual Studio为您提供的关于数据上下文的错误的更多信息? – Berni 2012-07-26 14:59:00

+0

我的错 - 原来是ReSharper谁决定强调它不应该有的东西。 – 2012-07-26 19:13:40

相关问题