Panorama TitleTemplate,HeaderTemplate和ItemTemplate的不同ItemSources

时间:2014-02-09 10:09:42

标签: xaml mvvm panorama-control

我有一个将ItemSource设置为在viewmodel中创建的ObservableCollection的Panorama

在ViewModel.cs

public ObservableCollection<UserSchema> SeriesData;

private string  _HeaderTitle;

    public string HeaderTitle
    {
        get
        {
            return _HeaderTitle;
        }
        private set
        {
            _HeaderTitle = value;
            NotifyPropertyChanged("HeaderTitle");
        }
    }

HeaderTitle的值来自HeaderSchema类的Title属性(见下文)。这是在此处未显示的viewmodel构造函数中的其他位置设置的。

UserSchema.cs包含已实现INotifyProperyChanged并具有两个属性的UserSchema。我已经实现了公共getter和setter

private string _objectname;
private string _objectpath;

public string ObjectName
        {
            get 
            {
                return _objectName;
            }
            set 
            {
                _objectName = value;
                NotifyPropertyChanged("ObjectName");
            }
        }

_objectPath属性的类似代码也是。

我有另一个HeaderSchema.cs,它也实现了INotifyProperyChanged并有两个属性。我已经实现了公共getter和setter

private string _Title;

    public string Title
    {
        get
        {
            return _Title;
        }
        set 
        {
            _Title = value;
            NotifyPropertyChanged("Title");
        }

    }

我再一次创建了一个上面的公共get和set属性作为Title

现在在MainPage.xaml中我已经将Panaroma ItemSource设置为SeriesData,在后面的代码中的其他地方我已经将DataContext设置为viewmodel。

<controls:Panorama  x:Name="SerPan" ItemsSource="{Binding SeriesData}">

            <controls:Panorama.HeaderTemplate>
                <DataTemplate>
                    <Grid x:Name="grid">
                        <TextBlock  Text="{Binding ObjectName}">
                        </TextBlock>
                    </Grid>
                </DataTemplate>
            </controls:Panorama.HeaderTemplate>

            <controls:Panorama.ItemTemplate>
                <DataTemplate>
                    <Image Source="{Binding ObjectPath}"/>
                </DataTemplate>
            </controls:Panorama.ItemTemplate>

        </controls:Panorama>

这非常有效,我得到了正确的输出。

我想要的是设置全景标题,我想从viewmodel获取HeaderTitle属性的文本。 类似下面的内容,但问题是HeaderTitle是一个不同的属性,而不是SeriesData的一部分,它是全景的ItemSource。

    <controls:Panorama.TitleTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding HeaderTitle}"> //does not work.
            </TextBlock>
        </DataTemplate>
    </controls:Panorama.TitleTemplate>

1 个答案:

答案 0 :(得分:1)

如果您的ViewModel是Panorama控件的DataContext,您可以通过ElementName Binding访问它:

SerPan.DataContext = myViewModelInstance;

<phone:Panorama.HeaderTemplate>
    <DataTemplate>
        <TextBlock Text="{Binding ElementName=SerPan, Path=DataContext.HeaderTitle}" />
    </DataTemplate>
</phone:Panorama.HeaderTemplate>