【问题标题】:Different ItemSources for Panorama TitleTemplate, HeaderTemplate and ItemTemplate全景 TitleTemplate、HeaderTemplate 和 ItemTemplate 的不同 ItemSource
【发布时间】:2014-02-09 10:09:41
【问题描述】:

我有一个全景图,其中 ItemSource 设置为在视图模型中创建的 ObservableCollection

在 ViewModel.cs 中

public ObservableCollection<UserSchema> SeriesData;

private string  _HeaderTitle;

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

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

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 属性

现在在 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 的一部分,SeriesData 是全景图的 ItemSource。

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

【问题讨论】:

    标签: xaml mvvm panorama-control


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2012-05-26
      • 2012-03-18
      • 2012-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-09
      • 1970-01-01
      • 2023-04-02
      相关资源
      最近更新 更多