Windows phone 7 WP7:绑定到pivot.itemtemplate外部的元素

Windows phone 7 WP7:绑定到pivot.itemtemplate外部的元素,windows-phone-7,binding,scope,pivot,Windows Phone 7,Binding,Scope,Pivot,我已经为此挣扎了一段时间。我有点新手,但我潜伏了很多,仍然找不到解决问题的方法,所以我决定把我的问题贴在这里 我正在将轴绑定到要显示以创建库的对象集合。这里是绑定到名为gallery的列表的pivot控件,其中每个对象包含2个字符串(url和描述) datacontext是viewmodel,并在页面的构造函数中初始化。 这是我的ViewModel: public class GalleryViewModel : INotifyPropertyChanged { public Lis

我已经为此挣扎了一段时间。我有点新手,但我潜伏了很多,仍然找不到解决问题的方法,所以我决定把我的问题贴在这里

我正在将轴绑定到要显示以创建库的对象集合。这里是绑定到名为gallery的列表的pivot控件,其中每个对象包含2个字符串(url和描述)


datacontext是viewmodel,并在页面的构造函数中初始化。 这是我的ViewModel:

public class GalleryViewModel : INotifyPropertyChanged
{
    public List<Gallery> gallery
    {
        get { return Globals.pictures; }

    }

    private Visibility _showDetail = Visibility.Collapsed;
    public Visibility ShowDetail
    {
        get { return _showDetail; }
        set {
           _showDetail = value;
           RaisePropertyChanged("ShowDetail");
        }
    }       
    public GalleryViewModel()
    { }

    public event PropertyChangedEventHandler PropertyChanged = delegate { return; };
    protected void RaisePropertyChanged(string propertyName)
    {
       PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
}
公共类GalleryViewModel:INotifyPropertyChanged
{
公众名单库
{
获取{返回Globals.pictures;}
}
私有可见性_showDetail=可见性。已折叠;
公众能见度展示详情
{
获取{return\u showtail;}
设置{
_showDetail=值;
RaisePropertyChanged(“ShowDetail”);
}
}       
公共厨房视图模型()
{ }
公共事件PropertyChangedEventHandler PropertyChanged=委托{return;};
受保护的void RaisePropertyChanged(字符串propertyName)
{
PropertyChanged(这是新的PropertyChangedEventArgs(propertyName));
}
}
gallery对象是我的ViewModel中的列表,作为ShowDetail属性。由于ShowDetail不在范围内,因此我尝试按说明设置ElementName

pivot很好地绑定到库列表,但是当我更改ShowDetail的值时,网格不会隐藏。我还尝试将ElementName设置为LayoutRoot,但仍然不起作用


我的问题是,当可见性不在itemtemplate的范围内时,如何绑定它?

DataTemplate
ElementName绑定仅指
DataTemplate
中的元素名称。数据模板中的数据上下文是
Gallery
实例,而不是
GalleryViewModel
。您可以将showdeail属性下移到
Gallery

如果您不想这样做,那么另一种方法是使用数据上下文的代理,将其作为资源添加到页面并绑定到页面的数据上下文(一个
GalleryViewModel
实例)。然后,您可以像在父数据上下文中获取任何其他资源一样引用该资源


如果您不熟悉此代理概念,那么应该会有所帮助。

我认为我将使用代理方法,因为属性ShowDetail是一个共享属性(静态)。感谢您快速清晰地回答!
public class GalleryViewModel : INotifyPropertyChanged
{
    public List<Gallery> gallery
    {
        get { return Globals.pictures; }

    }

    private Visibility _showDetail = Visibility.Collapsed;
    public Visibility ShowDetail
    {
        get { return _showDetail; }
        set {
           _showDetail = value;
           RaisePropertyChanged("ShowDetail");
        }
    }       
    public GalleryViewModel()
    { }

    public event PropertyChangedEventHandler PropertyChanged = delegate { return; };
    protected void RaisePropertyChanged(string propertyName)
    {
       PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
}