如何在 Silverlight 中使用 DataTemplate 显示单个项目?

Posted

技术标签:

【中文标题】如何在 Silverlight 中使用 DataTemplate 显示单个项目?【英文标题】:How do I display a single item using a DataTemplate in Silverlight? 【发布时间】:2010-10-08 11:23:13 【问题描述】:

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

        <ItemsControl
            ItemsSource="Binding Session"
            ItemTemplate="StaticResource SessionHeaderDataTemplate"
            />

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

有什么想法,或者我应该在我的 ViewModel 中创建一个单元素集合并绑定到它吗?

编辑:这就是我最终要做的,尽管下面的答案也是一个解决方案。我非常喜欢我的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");
            
        
    

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

同意不创建用户控件。这很有效,而且比 UserControl 简单得多。【参考方案2】:

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

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

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

【讨论】:

我将把它标记为答案,因为它是一个可行的解决方案,但我最终制作了一个要绑定的单元素集合,因为我更喜欢将所有可重用的数据模板保存在一个地方。

以上是关于如何在 Silverlight 中使用 DataTemplate 显示单个项目?的主要内容,如果未能解决你的问题,请参考以下文章

如何连接 TextBox 的 TextChanged 事件和命令以便在 Silverlight 中使用 MVVM 模式

如何在 Web 浏览器中从 Silverlight 应用程序捕获图像

我如何在 Silverlight 动画中添加声音?

Silverlight:如何在 setter 中为样式使用绑定(或等效的解决方法)

DataGrid和Silverlight

如何在 Silverlight/WPF 中反转剪裁几何?