想象我有这个:
[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
啊,好吧..我刚刚意识到背景颜色是白色的......我的文字也是如此。感谢所有人的帮助。