我是Silverlight 4的新手,因为我对所涉及的术语并不十分熟悉,所以我很难用Google搜索。有人能指出我正确的方向吗?
我有一个可观察的集合,我想在ItemsControl列表中表示。集合的类型是一个类 - 为简单起见 - 让我们调用 PersonInfo 。每个 PersonInfo 都有一个字符串属性 名称 和一个可观察的集合 PhoneNumbers 。当我告诉ItemsControl的DataTemplate使用“UserControl1”来可视化数据时,一切正常。绑定有效。
我的问题是 - 对于这个理论示例 - 我想基于用于在Name属性中的某些值上显示PersonInfo的控件。所以我想将UserControl1用于任何名为“Joe”的条目,并将UserControl2用于所有其他条目。我发现了IValueConverter的东西,但这似乎没有帮助选择用于可视化数据的控件类型。
旁注: UserControl1和UserControl2以类似的方式显示数据,但在复杂的网格布局中存在一些差异,迫使我创建2个单独的用户控件。如果有人知道如何在UserControl1的xaml中构建多个布局,然后在运行时通过属性绑定在它们之间切换,那么这可能会让我完全回避这个问题......
任何人都可以推荐解决此问题任何一方的一般策略吗?
提前致谢!
答案 0 :(得分:0)
我以一种不寻常的方式使用IValueConverter
解决了类似的困境:我创建了一个“VisibilityConverter”来告诉控件是否应该出现。在你的例子中,你将有两个:一个转换方法
return ((PersonInfo)o).Name == "Joe" ? Visibility.Visible : Visibility.Collapsed;
而另一个会做相反的事情。然后将UserControl1
的可见性绑定到一个VisibilityConverter
并将UserControl2
的可见性绑定到另一个和violà,它们会根据数据进行换出。