在Silverlight中如何使用DataTemplate展示单个条目?

15
我试图使用 DataTemplate 显示一个单独的项(不包含在集合中)。这是我到目前为止的代码,但什么也没有显示出来。将ItemsControl 替换为 ListBox 会显示一个空的列表框(所以我知道元素存在)。
        <ItemsControl
            ItemsSource="{Binding Session}"
            ItemTemplate="{StaticResource SessionHeaderDataTemplate}"
            />

Session是一个单独的对象。我想使用DataTemplate,因为我在我的应用程序中的其他地方也显示相同的信息,并且希望将呈现样式定义为资源,以便我可以在一个地方进行更新。

有什么想法,还是我应该在ViewModel中创建一个只含1个元素的集合并绑定到它?

编辑:这就是我最终所做的,尽管下面的答案也是一种解决方案。我非常喜欢我的DataTemplates,所以不太喜欢把这样的东西推出到另一个XAML文件中。

XAML:

        <ItemsControl
            DataContext="{Binding}"
            ItemsSource="{Binding Session_ListSource}"
            ItemTemplate="{StaticResource SessionHeaderDataTemplate}" />

视图模型:

    private Session m_Session;
    public Session Session
    {
        get { return m_Session; }
        set
        {
            if (m_Session != value)
            {
                m_Session = value;
                OnPropertyChanged("Session");

                // Added these two lines 
                Session_ListSource.Clear();
                Session_ListSource.Add(this.Session);
            }
        }
    }

    // Added this property.
    private ObservableCollection<Session> m_Session_ListSource = new ObservableCollection<Session>();
    public ObservableCollection<Session> Session_ListSource
    {
        get { return m_Session_ListSource; }
        set
        {
            if (m_Session_ListSource != value)
            {
                m_Session_ListSource = value;
                OnPropertyChanged("Session_ListSource");
            }
        }
    }
2个回答

32

对于没有代码后台的简单视图,请使用您的数据模板,而不是创建另一个用户控件。使用ContentControl来显示单个项目的数据模板。

 <ContentControl 
      ContentTemplate="{StaticResource SessionHeaderDataTemplate}" 
      Content="{Binding Path=Session}" />

同意不创建UserControl。这种方法可行,而且比创建UserControl简单得多。 - Stephen Hosking

1

你不需要使用ItemsControl来实现这个,只需创建一个自定义用户控件,然后绑定到它,例如:

<TestProject:myControl DataContext="{Binding Session}" />

自定义控件可以拥有自己的XAML文件,因此它可以看起来任何你想要的样子。

我将把这个标记为答案,因为它是一个可行的解决方案,但最终我创建了一个1元素集合来绑定,因为我更喜欢将所有可重用的数据模板放在一个地方。 - geofftnz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接