Silverlight4 数据模板

发布于 2024-11-03 20:30:39 字数 229 浏览 0 评论 0原文

我有一个 ItemsControl,其 ItemsSource 绑定到一个集合,另外我还有一个 ItemTemplateSelector 集。

它工作得很好,但是 DataTemplateSelector 只允许我访问由 ItemsSource 绑定的项目,但是我想使用 Parent DataContext 来决定应该使用什么项目模板。

这在SL4中可以实现吗?

如果可以的话怎样才能实现呢??

I have a ItemsControl with its ItemsSource bound to a collection, additionally I have a ItemTemplateSelector set.

It works well however the DataTemplateSelector only allows me to access the items bound by ItemsSource, however I want to use the Parents DataContext to make the decision on what item template should be used.

Is this achievable in SL4??

If so how can it be achieved??

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梦境 2024-11-10 20:30:39

感谢您的回复@Xin,但我通过执行以下操作成功解决了我的问题。

        private void UserControl_Loaded(object sender, RoutedEventArgs e)
    {
        DataTemplate dt = null;

        switch ((DataContext as PlanViewModel).Plan.Status)
        {
            case Infrastructure.Services.Web.PlanStatus.Appraisal:
                dt = (DataTemplate)this.Resources["Appraisal"];
                break;
            case Infrastructure.Services.Web.PlanStatus.Maintenance:
                dt = (DataTemplate)this.Resources["Maintenance"];
                break;
            case Infrastructure.Services.Web.PlanStatus.Setting:
                dt = (DataTemplate)this.Resources["Setting"];
                break;
        }

        itemsControl1.ItemTemplate = dt;
    }

Thanks for your response @Xin but I managed to resolve my problem by doing the following.

        private void UserControl_Loaded(object sender, RoutedEventArgs e)
    {
        DataTemplate dt = null;

        switch ((DataContext as PlanViewModel).Plan.Status)
        {
            case Infrastructure.Services.Web.PlanStatus.Appraisal:
                dt = (DataTemplate)this.Resources["Appraisal"];
                break;
            case Infrastructure.Services.Web.PlanStatus.Maintenance:
                dt = (DataTemplate)this.Resources["Maintenance"];
                break;
            case Infrastructure.Services.Web.PlanStatus.Setting:
                dt = (DataTemplate)this.Resources["Setting"];
                break;
        }

        itemsControl1.ItemTemplate = dt;
    }
妥活 2024-11-10 20:30:39

是的。

将布局根命名为“LayoutRoot”,然后您可以

<TextBlock Text="{Binding DataContext.SomeTextInParent, ElementName=LayoutRoot}" />

在项目模板中执行此操作。

Yes it is.

Name your layout root 'LayoutRoot', then you can do

<TextBlock Text="{Binding DataContext.SomeTextInParent, ElementName=LayoutRoot}" />

in your item template.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文