首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数据绑定到Panorama.TitleTemplate

将数据绑定到Panorama.TitleTemplate
EN

Stack Overflow用户
提问于 2013-03-30 23:02:03
回答 1查看 660关注 0票数 0

我一直在尝试通过使用Panorama.TitleTemplate属性和一个用于绑定数据的字典来自定义全景页面的标题区域,但没有成功。我的XAML代码如下:

代码语言:javascript
复制
<Grid x:Name="LayoutRoot">
    <controls:Panorama Name="siteHubPanoramaControl">
        <controls:Panorama.TitleTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal" Height="75" Margin="0,75,0,0" Width="470" DataContext="{Binding}">
                    <Image Source="{Binding imageSource}" />
                    <TextBlock Text="{Binding name}" />
                </StackPanel>
            </DataTemplate>
        </controls:Panorama.TitleTemplate>

        <!--Panorama item one-->
        <controls:PanoramaItem Header="Site Info">
            <Grid/>
        </controls:PanoramaItem>

        <!--Panorama item two-->
        <controls:PanoramaItem Header="Others">
            <Grid/>
        </controls:PanoramaItem>
    </controls:Panorama>
</Grid>

我使用以下代码将字典绑定到数据模板:

代码语言:javascript
复制
Dictionary<string, string> dictionary = new Dictionary<string, string>();
dictionary.Add("name", this.name);
dictionary.Add("imageSource", "http://...");

siteHubPanoramaControl.DataContext = dictionary;

我一直在寻找解决方案,但找不到。如果你能在这个问题上帮助我,我将很高兴。

另外,有没有很好的资料可以学习数据绑定?

先谢谢你...

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-31 00:08:35

nameimageSource都不是属性。它只是你字典里的关键字。因此,当您尝试绑定这两个名称时,它找不到任何具有这些名称的属性。

您必须将这些值公开到一个属性中。例如,

代码语言:javascript
复制
public string Name
{
    get { return dictionary["name"]; }
}

我不确定有没有其他方法,但那将是我的想法。我想应该行得通。

编辑:

好的,假设你使用的是MVVM模式,下面的代码应该可以工作。

ViewModel

代码语言:javascript
复制
    public class MainPageViewModel
    {
        private Dictionary<string,string> _dictionary = new Dictionary<string, string>();

        public MainPageViewModel()
        {
            _dictionary.Add("name", "Foo");
            _dictionary.Add("imageSource", "http://");
        }

        public string Name
        {
            get { return _dictionary["name"]; }
        }

        public string ImageSource
        {
            get { return _dictionary["imageSource"]; }
        }
    }

代码隐藏

代码语言:javascript
复制
public partial class MainPage : PhoneApplicationPage
{
    private MainPageViewModel _vm;
    // Constructor
    public MainPage()
    {
        InitializeComponent();

        _vm = new MainPageViewModel();
        DataContext = _vm;
    }
}

XAML

代码语言:javascript
复制
<Grid x:Name="LayoutRoot">
    <phone:Panorama Name="siteHubPanoramaControl">
        <phone:Panorama.Title>
            <StackPanel Orientation="Horizontal">
                    <Image Source="{Binding ImageSource}"/>
                    <TextBlock Text="{Binding Name}" />
                </StackPanel>
        </phone:Panorama.Title>
        <!--Panorama item one-->
        <phone:PanoramaItem Header="Foo">
            <Grid/>
        </phone:PanoramaItem>

        <!--Panorama item two-->
        <phone:PanoramaItem Header="Others">
            <Grid/>
        </phone:PanoramaItem>
    </phone:Panorama>
</Grid>

对于XAML,不使用Panorama.TitleTemplate和应用DataTemplate,而是使用Panorama.Title,这使得它更容易。我试过用TitleTemplate,我只能让它绑定标题,而不是图像。因此,最简单的解决方法是使用Panorama.Title

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15719938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档