15

我正在尝试使用 DataTemplate 显示单个项目(不包含在集合中)。这是我到目前为止所得到的,没有显示任何内容。替换ItemsControlListBox显示一个空的列表框(所以我知道元素在那里)。

        <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");
            }
        }
    }
4

2 回答 2

32

坚持使用您的数据模板来获得简单的视图,而无需创建另一个用户控件。使用 ContentControl 显示单个项目的 DataTemplate。

 <ContentControl 
      ContentTemplate="{StaticResource SessionHeaderDataTemplate}" 
      Content="{Binding Path=Session}" />
于 2009-07-21T21:16:13.297 回答
1

您不需要使用 ItemsControl 来执行此操作,只需创建一个自定义用户控件,然后绑定到该控件,例如

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

自定义控件可以有它自己的 xaml 文件,因此它可以看起来像你想要的那样。

于 2009-02-19T00:37:36.807 回答