c# - Windows 10 UWP 应用程序中的 ItemsControl 和 ItemTemplateSelector

标签 c# xaml win-universal-app uwp

我很久以前做过一点 WPF 编程,但我刚刚回到使用 UWP 的 xaml,但我认为这应该可行,但无法弄清楚为什么。基本上我想使用 ItemsControl(因为我只想列出一些数据,我不想选择)而不是 ListView 控件。这是我的资源:

<Page.Resources>
    <DataTemplate x:Key="SentMessageDataTemplate">
        <TextBlock Text="Sent" />
    </DataTemplate>
    <DataTemplate x:Key="ReceivedMessageDataTemplate">
        <TextBlock Text="Recieved" />
    </DataTemplate>
    <services:MessageDataTemplateSelector x:Key="MessageDataTemplateSelector" ReceivedTemplate="{StaticResource ReceivedMessageDataTemplate}" SentTemplate="{StaticResource SentMessageDataTemplate}"></services:MessageDataTemplateSelector>
</Page.Resources>

这是我的 ItemsControl:

<ItemsControl ItemsSource="{Binding Messages}" ItemTemplateSelector="{StaticResource MessageDataTemplateSelector}" />

这是我的 DataTemplateSelector:

public class MessageDataTemplateSelector : DataTemplateSelector
{
    public DataTemplate SentTemplate
    {
        get;
        set;
    }

    public DataTemplate ReceivedTemplate
    {
        get;
        set;
    }

    protected override DataTemplate SelectTemplateCore(object item)
    {
        var message = item as MessageViewModel;
        if (message == null)
        {
            return this.SentTemplate;
        }

        return message.Sent ? this.SentTemplate : this.ReceivedTemplate;
    }
}

它不显示我的任何一个模板,而是只显示我的 ViewModel 类型名称(基本上是 ToString)。

但是,如果我将它从 ItemsControl 切换到 ListView,它就可以正常工作。

有什么建议吗?

最佳答案

改为使用此覆盖:

protected override DataTemplate SelectTemplateCore(object item, DependencyObject container)

这是被调用的那个,而不是没有第二个参数的那个。

关于c# - Windows 10 UWP 应用程序中的 ItemsControl 和 ItemTemplateSelector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34917181/

相关文章:

c# - 在 .Net Remoting 中使用单例

c# - 为什么 (int)(33.46639 * 1000000) 返回 33466389?

WPF,滚动条拇指向后显示

c# - 更新另一个页面上的控件 Windows 8 Metro 应用程序 C#

wpf - 如何在 XAML 声明的标签中的两个单词之间强制换行?

c++ - 如何复制 IMFSample 对象

c# - 在 UWP(通用 Windows 应用程序)、Windows 10 中创建自定义形状控件

c# 将文件从源文件夹复制到目标文件夹

c# - UserControl 使用的内存是否存储在堆中?

c# - UWP - 使用 sqlite 的可移植类库。我是否误解了诱饵+开关组件?