我有一个将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>
答案 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>