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

Silverlight:有条件地将可观察集合绑定到不同的UserControl,silverlight,data-binding,user-controls,Silverlight,Data Binding,User Controls,我是Silverlight 4的新手,在谷歌上搜索这一个很困难,因为我对所涉及的术语不太熟悉。有人能给我指出正确的方向吗 我有一个要在ItemsControl列表中表示的可观察集合。集合的类型是一个类,为了简单起见,让我们调用PersonInfo。每个PersonInfo都有一个字符串属性Name和一个可观察的集合PhoneNumbers。当我告诉ItemsControl的DataTemplate使用“UserControl1”来可视化数据时,一切都很好——绑定工作正常 我的问题是,对于这个理论

我是Silverlight 4的新手,在谷歌上搜索这一个很困难,因为我对所涉及的术语不太熟悉。有人能给我指出正确的方向吗

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

我的问题是,对于这个理论示例,我想将用于显示PersonInfo的控件基于名称propery中的某些值。所以我想对任何名为“Joe”的条目使用UserControl1,对所有其他条目使用UserControl2。我找到了IValueConverter的东西,但这似乎无助于选择用于可视化数据的控件类型

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

有人能推荐一个解决这一问题的总体策略吗


提前谢谢

我以一种不同寻常的方式使用
IValueConverter
解决了一个类似的难题:我创建了一个“VisibilityConverter”,告诉控件它是否应该出现。在您的示例中,您将有两种方法:一种是Convert方法

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

而另一个则相反。然后将
UserControl1
的可见性绑定到一个
VisibilityConverter
并将
UserControl2
的可见性绑定到另一个和violá,它们根据数据进行交换。

感谢您的回复!有趣的是,你也得出了这个结论。在发布这个问题之前,我最终走上了这条路——我想必须有一个解决方案,让我以一种更简单的方式交换这些东西。我使用了一个接受绑定参数的valueconverter来知道哪个控件调用了它,但我更喜欢单独的验证器方法。很高兴知道我没有完全偏离正轨!再次感谢