Silverlight:有条件地将可观察集合绑定到不同的用户控件

时间:2010-10-15 03:02:22

标签: silverlight data-binding user-controls

我是Silverlight 4的新手,因为我对所涉及的术语并不十分熟悉,所以我很难用Google搜索。有人能指出我正确的方向吗?

我有一个可观察的集合,我想在ItemsControl列表中表示。集合的类型是一个类 - 为简单起见 - 让我们调用 PersonInfo 。每个 PersonInfo 都有一个字符串属性 名称 和一个可观察的集合 PhoneNumbers 。当我告诉ItemsControl的DataTemplate使用“UserControl1”来可视化数据时,一切正常。绑定有效。

我的问题是 - 对于这个理论示例 - 我想基于用于在Name属性中的某些值上显示PersonInfo的控件。所以我想将UserControl1用于任何名为“Joe”的条目,并将UserControl2用于所有其他条目。我发现了IValueConverter的东西,但这似乎没有帮助选择用于可视化数据的控件类型。

旁注: UserControl1和UserControl2以类似的方式显示数据,但在复杂的网格布局中存在一些差异,迫使我创建2个单独的用户控件。如果有人知道如何在UserControl1的xaml中构建多个布局,然后在运行时通过属性绑定在它们之间切换,那么这可能会让我完全回避这个问题......

任何人都可以推荐解决此问题任何一方的一般策略吗?

提前致谢!

1 个答案:

答案 0 :(得分:0)

我以一种不寻常的方式使用IValueConverter解决了类似的困境:我创建了一个“VisibilityConverter”来告诉控件是否应该出现。在你的例子中,你将有两个:一个转换方法

return ((PersonInfo)o).Name == "Joe" ? Visibility.Visible : Visibility.Collapsed;

而另一个会做相反的事情。然后将UserControl1的可见性绑定到一个VisibilityConverter并将UserControl2的可见性绑定到另一个和violà,它们会根据数据进行换出。