不同的数据结构,在XAML中显示

时间:2015-01-23 13:18:07

标签: c# xaml datacontractserializer

想象我有这个:

[DataContract]
[KnownType(typeof(List<string>))]
[KnownType(typeof(string))]
class Something
{
    public object mail {get;set;}
}

而不是必须检查邮件是List还是字符串,然后强制它成为一个列表以在我的XAML前端显示它...我怎么能在XAML中做几乎一个if语句,以便它使用List或Textblock ......

这是xaml atm:

<ListBox x:Name="ContactMail"
    ItemsSource="{Binding Contact.mail}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <TextBlock
                    Text="{Binding}"></TextBlock>
            </DataTemplate>
        </ListBox.ItemTemplate>
</ListBox>

我几乎想做(伪代码):

if( GetType( Contact.mail ) == List )
{
   // Do this XAML
}
else
{
   // Do this XAML
}

修改

我无法完成这项工作:

<u:ContactTemplate Content="{Binding Contact.title}" HorizontalAlignment="Left" HorizontalContentAlignment="Left">
    <u:ContactTemplate.PropertyListString>
        <DataTemplate>
            <ListBox x:Name="ContactTitle"
                ItemsSource="{Binding Contact.title}">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <TextBlock
                            Text="{Binding}"></TextBlock>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>
        </DataTemplate>
    </u:ContactTemplate.PropertyListString>
    <u:ContactTemplate.PropertyString>
        <DataTemplate>
            <TextBlock
                Text="{Binding Contact.title}"></TextBlock>
        </DataTemplate>
    </u:ContactTemplate.PropertyString>
</u:ContactTemplate>

这是我的数据模板选择器,似乎返回正确的ContactTemplate:

public class ContactTemplate : DataTemplateSelector
{
    public DataTemplate PropertyListString { get; set; }
    public DataTemplate PropertyString { get; set; }

    public override DataTemplate SelectTemplate(object item, DependencyObject container)
    {
        if( item.GetType() == typeof(List<string>))
        {
            return PropertyListString;
        }
        else
        {
            return PropertyString;
        }
    }
}

我也尝试过ObservableCollection


啊,好吧..我刚刚意识到背景颜色是白色的......我的文字也是如此。感谢所有人的帮助。

0 个答案:

没有答案